home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Visual Database / Visual dBase Pro v7.0 / DATA1.CAB / Utilities / Web_Wizard / WebWizard.wfm < prev    next >
Encoding:
Text File  |  1997-11-20  |  110.0 KB  |  4,140 lines

  1. if not file('Design.txt')
  2.    msgbox('The Visual dBASE 7 Web Wizards'+chr(13)+;
  3.           'cannot be loaded from the .wfm file'+chr(13)+;
  4.           'Start the Wizards with "WebWizard.prg"',;
  5.           'Wrong File',16)
  6.    return
  7. endif
  8.  
  9. CLOSE ALL
  10. Set Talk Off
  11. Set Deleted On
  12. SET CUAENTER OFF
  13. Close all
  14.  
  15. set proc to WebWizard.cc 
  16. set proc to Program(1) addi
  17. cHome = substr(program(0),1,rat('\',program(0)))
  18.  
  19. set path to &cHome
  20. f = new WebWizardForm()
  21. f.mdi = .f.
  22. // for testing purposes:
  23. f.aOptions = new array()
  24. f.cLoadPath = cHome
  25. f.Open()
  26. return
  27.  
  28. // declare constants to use with page navigation array
  29. // Page navigation array is instantiated when main Wizard 
  30. // button is pressed to determine
  31. ** END HEADER -- do not remove this line
  32. //
  33. // Generated on 11/20/97
  34. //
  35. parameter bModal
  36. local f
  37. f = new WebWizardForm()
  38. if (bModal)
  39.    f.mdi = false // ensure not MDI
  40.    f.readModal()
  41. else
  42.    f.open()
  43. endif
  44.  
  45. class WebWizardForm of FORM
  46.    set procedure to WIZHTML.CC additive
  47.    with (this)
  48.       onOpen = class::FORM_ONOPEN
  49.       onClose = class::FORM_ONCLOSE
  50.       open = class::FORM_OPEN
  51.       readModal = class::FORM_READMODAL
  52.       scaleFontSize = 8
  53.       scaleFontBold = false
  54.       metric = 6    // Pixels
  55.       colorNormal = ""
  56.       height = 338
  57.       left = 131
  58.       top = 42
  59.       width = 478
  60.       text = "Visual dBASE 7 Web Wizards"
  61.       autoCenter = true
  62.       mdi = false
  63.       sizeable = false
  64.       escExit = false
  65.       maximize = false
  66.       refreshAlways = false
  67.    endwith
  68.  
  69.  
  70.    this.WIZTEMP1 = new QUERY()
  71.    this.WIZTEMP1.parent = this
  72.    with (this.WIZTEMP1)
  73.       left = 25
  74.       top = 242
  75.       sql = 'select * from "wiztemp.dbf"'
  76.       active = true
  77.    endwith
  78.  
  79.  
  80.  
  81.  
  82.    this.MASK = new RECTANGLE(this)
  83.    with (this.MASK)
  84.       left = -3
  85.       top = -2
  86.       width = 518
  87.       height = 340
  88.       metric = 6    // Pixels
  89.       text = "Rectangle1"
  90.       colorNormal = "WindowText/BtnFace"
  91.       border = false
  92.       fontName = "MS Sans Serif"
  93.       fontSize = 8
  94.       pageno = 0
  95.       borderStyle = 3    // None
  96.    endwith
  97.  
  98.  
  99.    this.BACKBUTTON = new PUSHBUTTON(this)
  100.    with (this.BACKBUTTON)
  101.       onClick = class::BACKBUTTON_ONCLICK
  102.       enabled = false
  103.       height = 22
  104.       left = 92
  105.       top = 301
  106.       width = 84
  107.       text = "Back"
  108.       metric = 6    // Pixels
  109.       fontSize = 8
  110.       group = true
  111.       colorNormal = "BtnText/BtnFace"
  112.       pageno = 0
  113.       value = false
  114.    endwith
  115.  
  116.  
  117.    this.NEXTBUTTON = new PUSHBUTTON(this)
  118.    with (this.NEXTBUTTON)
  119.       onClick = class::NEXTBUTTON_ONCLICK
  120.       enabled = false
  121.       height = 22
  122.       left = 176
  123.       top = 301
  124.       width = 84
  125.       text = "Next"
  126.       metric = 6    // Pixels
  127.       fontSize = 8
  128.       group = true
  129.       colorNormal = "BtnText/BtnFace"
  130.       pageno = 0
  131.       value = false
  132.    endwith
  133.  
  134.  
  135.    this.CANCELBUTTON = new PUSHBUTTON(this)
  136.    with (this.CANCELBUTTON)
  137.       onClick = class::CANCELBUTTON_ONCLICK
  138.       height = 22
  139.       left = 272
  140.       top = 301
  141.       width = 84
  142.       text = "Cancel"
  143.       metric = 6    // Pixels
  144.       fontSize = 8
  145.       group = true
  146.       colorNormal = "BtnText/BtnFace"
  147.       pageno = 0
  148.       value = false
  149.    endwith
  150.  
  151.  
  152.    this.HELPBUTTON = new PUSHBUTTON(this)
  153.    with (this.HELPBUTTON)
  154.       onClick = class::HELPBUTTON_ONCLICK
  155.       height = 22
  156.       left = 367
  157.       top = 301
  158.       width = 84
  159.       text = "Help"
  160.       metric = 6    // Pixels
  161.       fontSize = 8
  162.       group = true
  163.       colorNormal = "BtnText/BtnFace"
  164.       pageno = 0
  165.       value = false
  166.    endwith
  167.  
  168.  
  169.    this.ARROW1 = new IMAGE(this)
  170.    with (this.ARROW1)
  171.       height = 70
  172.       left = 261
  173.       top = 96
  174.       width = 100
  175.       metric = 6    // Pixels
  176.       dataSource = "FILENAME www.bmp"
  177.       alignment = 4    // True Size
  178.       borderStyle = 3    // None
  179.    endwith
  180.  
  181.  
  182.    this.TEXT1 = new TEXT(this)
  183.    with (this.TEXT1)
  184.       height = 47
  185.       left = 100
  186.       top = 13
  187.       width = 323
  188.       metric = 6    // Pixels
  189.       colorNormal = "BtnText/BtnFace"
  190.       fontSize = 8
  191.       text = "<p>This Wizard helps you create Visual dBASE 7 Web applications.</p><p>Select the type of application you wish to create.</p>"
  192.    endwith
  193.  
  194.  
  195.    this.ARROW2 = new IMAGE(this)
  196.    with (this.ARROW2)
  197.       height = 13
  198.       left = 74
  199.       top = 14
  200.       width = 13
  201.       metric = 6    // Pixels
  202.       dataSource = "FILENAME Arrow.bmp"
  203.       alignment = 4    // True Size
  204.       borderStyle = 3    // None
  205.    endwith
  206.  
  207.  
  208.    this.DATAENTRYBUTTON = new PUSHBUTTON(this)
  209.    with (this.DATAENTRYBUTTON)
  210.       onClick = class::DATAENTRYBUTTON_ONCLICK
  211.       height = 68
  212.       left = 99
  213.       top = 97
  214.       width = 139
  215.       text = "Remote Data Entry"
  216.       metric = 6    // Pixels
  217.       upBitmap = "filename DataEntr.bmp"
  218.       fontSize = 8
  219.       group = true
  220.       colorNormal = "BtnText/BtnFace"
  221.       value = false
  222.    endwith
  223.  
  224.  
  225.    this.TEXT2 = new TEXT(this)
  226.    with (this.TEXT2)
  227.       height = 27
  228.       left = 83
  229.       top = 5
  230.       width = 147
  231.       metric = 6    // Pixels
  232.       colorNormal = "BtnText/BtnFace"
  233.       fontName = "Times New Roman"
  234.       fontSize = 8
  235.       text = "<b><font size=5>First Page Title</font></b>"
  236.       pageno = 9
  237.    endwith
  238.  
  239.  
  240.    this.DRILLDOWNBUTTON = new PUSHBUTTON(this)
  241.    with (this.DRILLDOWNBUTTON)
  242.       onClick = class::DRILLDOWNBUTTON_ONCLICK
  243.       height = 68
  244.       left = 99
  245.       top = 168
  246.       width = 139
  247.       text = "Query And Response"
  248.       metric = 6    // Pixels
  249.       upBitmap = "filename Query.bmp"
  250.       fontSize = 8
  251.       group = true
  252.       colorNormal = "BtnText/BtnFace"
  253.       value = false
  254.    endwith
  255.  
  256.  
  257.    this.TEXT3 = new TEXT(this)
  258.    with (this.TEXT3)
  259.       height = 19
  260.       left = 98
  261.       top = 35
  262.       width = 329
  263.       metric = 6    // Pixels
  264.       colorNormal = "BtnText/BtnFace"
  265.       fontSize = 8
  266.       text = "Enter and format the title for the starting page of your application."
  267.       pageno = 9
  268.    endwith
  269.  
  270.  
  271.    this.PUBLISHBUTTON = new PUSHBUTTON(this)
  272.    with (this.PUBLISHBUTTON)
  273.       onClick = class::PUBLISHBUTTON_ONCLICK
  274.       height = 68
  275.       left = 241
  276.       top = 168
  277.       width = 139
  278.       text = "Publish"
  279.       metric = 6    // Pixels
  280.       upBitmap = "filename Reports.bmp"
  281.       fontSize = 8
  282.       group = true
  283.       colorNormal = "BtnText/BtnFace"
  284.       value = false
  285.    endwith
  286.  
  287.  
  288.    this.TOPTEXTTITLE = new TEXT(this)
  289.    with (this.TOPTEXTTITLE)
  290.       height = 27
  291.       left = 83
  292.       top = 5
  293.       width = 277
  294.       metric = 6    // Pixels
  295.       colorNormal = "BtnText/BtnFace"
  296.       fontName = "Times New Roman"
  297.       fontSize = 8
  298.       text = "<h2>Text Above Data-Entry Area</h2>"
  299.       pageno = 10
  300.    endwith
  301.  
  302.  
  303.    this.TOPTEXTLABEL = new TEXT(this)
  304.    with (this.TOPTEXTLABEL)
  305.       height = 33
  306.       left = 98
  307.       top = 35
  308.       width = 379
  309.       metric = 6    // Pixels
  310.       colorNormal = "BtnText/BtnFace"
  311.       fontSize = 8
  312.       text = "Enter and format the text that will appear above data-entry area (optional)"
  313.       pageno = 10
  314.    endwith
  315.  
  316.  
  317.    this.ARROW3 = new IMAGE(this)
  318.    with (this.ARROW3)
  319.       height = 13
  320.       left = 83
  321.       top = 35
  322.       width = 13
  323.       metric = 6    // Pixels
  324.       dataSource = "FILENAME Arrow.bmp"
  325.       alignment = 4    // True Size
  326.       pageno = 9
  327.       borderStyle = 3    // None
  328.    endwith
  329.  
  330.  
  331.    this.ARROW4 = new IMAGE(this)
  332.    with (this.ARROW4)
  333.       height = 13
  334.       left = 83
  335.       top = 35
  336.       width = 13
  337.       metric = 6    // Pixels
  338.       dataSource = "FILENAME Arrow.bmp"
  339.       alignment = 4    // True Size
  340.       pageno = 10
  341.       borderStyle = 3    // None
  342.    endwith
  343.  
  344.  
  345.    this.DATASOURCEFIELD = new ENTRYFIELD(this)
  346.    with (this.DATASOURCEFIELD)
  347.       height = 19
  348.       left = 95
  349.       top = 171
  350.       width = 303
  351.       metric = 6    // Pixels
  352.       colorHighLight = ""
  353.       fontName = "MS Sans Serif"
  354.       fontSize = 8
  355.       value = "                         "
  356.       maxLength = 100
  357.       pageno = 4
  358.       borderStyle = 7    // Client
  359.    endwith
  360.  
  361.  
  362.    this.DATAMODULELOOKUPBUTTON = new PUSHBUTTON(this)
  363.    with (this.DATAMODULELOOKUPBUTTON)
  364.       onClick = class::DATAMODULELOOKUPBUTTON_ONCLICK
  365.       height = 19
  366.       left = 411
  367.       top = 171
  368.       width = 27
  369.       text = ""
  370.       metric = 6    // Pixels
  371.       upBitmap = "RESOURCE #148"
  372.       fontSize = 8
  373.       group = false
  374.       colorNormal = "BtnText/BtnFace"
  375.       pageno = 4
  376.       value = false
  377.    endwith
  378.  
  379.  
  380.    this.TEXT4 = new TEXT(this)
  381.    with (this.TEXT4)
  382.       height = 28
  383.       left = 98
  384.       top = 35
  385.       width = 340
  386.       metric = 6    // Pixels
  387.       colorNormal = "BtnText/BtnFace"
  388.       fontSize = 8
  389.       text = "Select a table or Data Module to supply the fields for this Web data-entry application."
  390.       pageno = 4
  391.    endwith
  392.  
  393.  
  394.    this.ARROW5 = new IMAGE(this)
  395.    with (this.ARROW5)
  396.       height = 13
  397.       left = 83
  398.       top = 35
  399.       width = 13
  400.       metric = 6    // Pixels
  401.       dataSource = "FILENAME Arrow.bmp"
  402.       alignment = 4    // True Size
  403.       pageno = 4
  404.       borderStyle = 3    // None
  405.    endwith
  406.  
  407.  
  408.    this.TEXT5 = new TEXT(this)
  409.    with (this.TEXT5)
  410.       height = 22
  411.       left = 83
  412.       top = 5
  413.       width = 137
  414.       metric = 6    // Pixels
  415.       colorNormal = "BtnText/BtnFace"
  416.       fontName = "Times New Roman"
  417.       fontSize = 8
  418.       text = "<font size=5><b>Data Source</b></font>"
  419.       pageno = 4
  420.    endwith
  421.  
  422.  
  423.    this.TEXT6 = new TEXT(this)
  424.    with (this.TEXT6)
  425.       height = 61
  426.       left = 98
  427.       top = 99
  428.       width = 340
  429.       metric = 6    // Pixels
  430.       colorNormal = "BtnText/BtnFace"
  431.       fontSize = 8
  432.       text = "If you're using a remote data engine or a local table that requires a log-in, you must use a Data Module that contains a database object with a hard-wired LoginString for anonymous log-in from the browser."
  433.       pageno = 4
  434.    endwith
  435.  
  436.  
  437.    this.ARROW6 = new IMAGE(this)
  438.    with (this.ARROW6)
  439.       height = 13
  440.       left = 83
  441.       top = 100
  442.       width = 13
  443.       metric = 6    // Pixels
  444.       dataSource = "FILENAME Arrow.bmp"
  445.       alignment = 4    // True Size
  446.       pageno = 4
  447.       borderStyle = 3    // None
  448.    endwith
  449.  
  450.  
  451.    this.AVAILABLEFIELDSLIST = new LISTBOX(this)
  452.    with (this.AVAILABLEFIELDSLIST)
  453.       height = 190
  454.       left = 84
  455.       top = 75
  456.       width = 164
  457.       metric = 6    // Pixels
  458.       id = 131
  459.       fontSize = 8
  460.       colorHighLight = "HighLightText/HighLight"
  461.       pageno = 5
  462.    endwith
  463.  
  464.  
  465.    this.SELECTONEBUTTON = new PUSHBUTTON(this)
  466.    with (this.SELECTONEBUTTON)
  467.       onClick = class::SELECTONEBUTTON_ONCLICK
  468.       height = 19
  469.       left = 253
  470.       top = 119
  471.       width = 30
  472.       text = ">"
  473.       metric = 6    // Pixels
  474.       group = false
  475.       colorNormal = "BtnText/BtnFace"
  476.       pageno = 5
  477.       value = false
  478.    endwith
  479.  
  480.  
  481.    this.SELECTALLBUTTON = new PUSHBUTTON(this)
  482.    with (this.SELECTALLBUTTON)
  483.       onClick = class::SELECTALLBUTTON_ONCLICK
  484.       height = 19
  485.       left = 253
  486.       top = 144
  487.       width = 30
  488.       text = ">>"
  489.       metric = 6    // Pixels
  490.       group = false
  491.       colorNormal = "BtnText/BtnFace"
  492.       pageno = 5
  493.       value = false
  494.    endwith
  495.  
  496.  
  497.    this.DESELECTONEBUTTON = new PUSHBUTTON(this)
  498.    with (this.DESELECTONEBUTTON)
  499.       onClick = class::DESELECTONEBUTTON_ONCLICK
  500.       height = 19
  501.       left = 253
  502.       top = 169
  503.       width = 30
  504.       text = "<"
  505.       metric = 6    // Pixels
  506.       group = false
  507.       colorNormal = "BtnText/BtnFace"
  508.       pageno = 5
  509.       value = false
  510.    endwith
  511.  
  512.  
  513.    this.DESELECTALLBUTTON = new PUSHBUTTON(this)
  514.    with (this.DESELECTALLBUTTON)
  515.       onClick = class::DESELECTALLBUTTON_ONCLICK
  516.       height = 19
  517.       left = 253
  518.       top = 194
  519.       width = 30
  520.       text = "<<"
  521.       metric = 6    // Pixels
  522.       group = false
  523.       colorNormal = "BtnText/BtnFace"
  524.       pageno = 5
  525.       value = false
  526.    endwith
  527.  
  528.  
  529.    this.SELECTEDFIELDSLIST = new LISTBOX(this)
  530.    with (this.SELECTEDFIELDSLIST)
  531.       height = 190
  532.       left = 286
  533.       top = 75
  534.       width = 164
  535.       metric = 6    // Pixels
  536.       id = 131
  537.       fontSize = 8
  538.       colorHighLight = "HighLightText/HighLight"
  539.       pageno = 5
  540.    endwith
  541.  
  542.  
  543.    this.TEXT7 = new TEXT(this)
  544.    with (this.TEXT7)
  545.       height = 14
  546.       left = 98
  547.       top = 35
  548.       width = 340
  549.       metric = 6    // Pixels
  550.       colorNormal = "BtnText/BtnFace"
  551.       fontSize = 8
  552.       text = "Select the fields you wish to appear on the data-entry page."
  553.       pageno = 5
  554.    endwith
  555.  
  556.  
  557.    this.ARROW7 = new IMAGE(this)
  558.    with (this.ARROW7)
  559.       height = 13
  560.       left = 83
  561.       top = 35
  562.       width = 13
  563.       metric = 6    // Pixels
  564.       dataSource = "FILENAME Arrow.bmp"
  565.       alignment = 4    // True Size
  566.       pageno = 5
  567.       borderStyle = 3    // None
  568.    endwith
  569.  
  570.  
  571.    this.TEXT8 = new TEXT(this)
  572.    with (this.TEXT8)
  573.       height = 22
  574.       left = 83
  575.       top = 5
  576.       width = 137
  577.       metric = 6    // Pixels
  578.       colorNormal = "BtnText/BtnFace"
  579.       fontName = "Times New Roman"
  580.       fontSize = 8
  581.       text = "<b><font size=5>Fields</font></b>"
  582.       pageno = 5
  583.    endwith
  584.  
  585.  
  586.    this.APPEARANCETEXT = new TEXT(this)
  587.    with (this.APPEARANCETEXT)
  588.       height = 61
  589.       left = 97
  590.       top = 35
  591.       width = 340
  592.       metric = 6    // Pixels
  593.       colorNormal = "BtnText/w"
  594.       fontSize = 8
  595.       l0 = "Select a background color and a background image (optional) for all pages of your data-entry application. Even if you use an image for your background, you should select a matching color as it will be displayed while the background image loads in the brows"
  596.       l0 += "er."
  597.       text = l0
  598.       pageno = 7
  599.    endwith
  600.  
  601.  
  602.    this.TEXT10 = new TEXT(this)
  603.    with (this.TEXT10)
  604.       height = 22
  605.       left = 83
  606.       top = 5
  607.       width = 137
  608.       metric = 6    // Pixels
  609.       colorNormal = "BtnText/BtnFace"
  610.       fontName = "Times New Roman"
  611.       fontSize = 8
  612.       text = "<b><font size=5>Appearance</font></b>"
  613.       pageno = 7
  614.    endwith
  615.  
  616.  
  617.    this.ARROW8 = new IMAGE(this)
  618.    with (this.ARROW8)
  619.       height = 13
  620.       left = 83
  621.       top = 35
  622.       width = 13
  623.       metric = 6    // Pixels
  624.       dataSource = "FILENAME Arrow.bmp"
  625.       alignment = 4    // True Size
  626.       pageno = 7
  627.       borderStyle = 3    // None
  628.    endwith
  629.  
  630.  
  631.    this.BACKGROUNDDISPLAY = new IMAGE(this)
  632.    with (this.BACKGROUNDDISPLAY)
  633.       height = 85
  634.       left = 85
  635.       top = 180
  636.       width = 107
  637.       metric = 6    // Pixels
  638.       alignment = 4    // True Size
  639.       pageno = 7
  640.       borderStyle = 2    // Lowered
  641.    endwith
  642.  
  643.  
  644.    this.BACKGROUNDCOLORFIELD = new ENTRYFIELD(this)
  645.    with (this.BACKGROUNDCOLORFIELD)
  646.       onChange = class::BACKGROUNDCOLORFIELD_ONCHANGE
  647.       enabled = false
  648.       height = 19
  649.       left = 199
  650.       top = 125
  651.       width = 206
  652.       metric = 6    // Pixels
  653.       colorHighLight = ""
  654.       fontName = "MS Sans Serif"
  655.       fontSize = 8
  656.       value = "0xC0C0C0                 "
  657.       maxLength = 100
  658.       pageno = 7
  659.       borderStyle = 7    // Client
  660.    endwith
  661.  
  662.  
  663.    this.BACKGROUNDLIST = new LISTBOX(this)
  664.    with (this.BACKGROUNDLIST)
  665.       onSelChange = class::BACKGROUNDLIST_ONSELCHANGE
  666.       height = 65
  667.       left = 199
  668.       top = 178
  669.       width = 127
  670.       metric = 6    // Pixels
  671.       id = 150
  672.       fontSize = 8
  673.       colorHighLight = "HighLightText/HighLight"
  674.       dataSource = 'ARRAY {"Grey Granite","Blue Granite","Grey Marble","Blue Marble","Green Marble"}'
  675.       pageno = 7
  676.    endwith
  677.  
  678.  
  679.    this.BACKGROUNDCOLORBUTTON = new PUSHBUTTON(this)
  680.    with (this.BACKGROUNDCOLORBUTTON)
  681.       onClick = class::BACKGROUNDCOLORBUTTON_ONCLICK
  682.       height = 19
  683.       left = 409
  684.       top = 125
  685.       width = 27
  686.       text = ""
  687.       metric = 6    // Pixels
  688.       upBitmap = "RESOURCE #148"
  689.       fontSize = 8
  690.       group = false
  691.       colorNormal = "BtnText/BtnFace"
  692.       pageno = 7
  693.       value = false
  694.    endwith
  695.  
  696.  
  697.    this.BACKGROUNDIMAGEBUTTON = new PUSHBUTTON(this)
  698.    with (this.BACKGROUNDIMAGEBUTTON)
  699.       height = 19
  700.       left = 409
  701.       top = 247
  702.       width = 27
  703.       text = ""
  704.       metric = 6    // Pixels
  705.       upBitmap = "RESOURCE #148"
  706.       fontSize = 8
  707.       group = false
  708.       colorNormal = "BtnText/BtnFace"
  709.       pageno = 7
  710.       value = false
  711.    endwith
  712.  
  713.  
  714.    this.BACKGROUNDIMAGEFIELD = new ENTRYFIELD(this)
  715.    with (this.BACKGROUNDIMAGEFIELD)
  716.       enabled = false
  717.       height = 19
  718.       left = 199
  719.       top = 247
  720.       width = 206
  721.       metric = 6    // Pixels
  722.       colorHighLight = ""
  723.       fontName = "MS Sans Serif"
  724.       fontSize = 8
  725.       value = "None                     "
  726.       maxLength = 100
  727.       pageno = 7
  728.       borderStyle = 7    // Client
  729.    endwith
  730.  
  731.  
  732.    this.TEXT11 = new TEXT(this)
  733.    with (this.TEXT11)
  734.       height = 15
  735.       left = 200
  736.       top = 164
  737.       width = 127
  738.       metric = 6    // Pixels
  739.       colorNormal = "BtnText/BtnFace"
  740.       fontSize = 8
  741.       text = "<p>Background image</p><p></p>"
  742.       pageno = 7
  743.    endwith
  744.  
  745.  
  746.    this.TEXT12 = new TEXT(this)
  747.    with (this.TEXT12)
  748.       height = 16
  749.       left = 199
  750.       top = 108
  751.       width = 127
  752.       metric = 6    // Pixels
  753.       colorNormal = "BtnText/BtnFace"
  754.       fontSize = 8
  755.       text = "Background color"
  756.       pageno = 7
  757.    endwith
  758.  
  759.  
  760.    this.BACKCOLORDISPLAY = new RECTANGLE(this)
  761.    with (this.BACKCOLORDISPLAY)
  762.       left = 85
  763.       top = 101
  764.       width = 107
  765.       height = 63
  766.       metric = 6    // Pixels
  767.       text = "Rectangle1"
  768.       colorNormal = "WindowText/BtnFace"
  769.       border = false
  770.       fontSize = 8
  771.       pageno = 7
  772.       borderStyle = 2    // Lowered
  773.    endwith
  774.  
  775.  
  776.    this.TEXT14 = new TEXT(this)
  777.    with (this.TEXT14)
  778.       height = 22
  779.       left = 83
  780.       top = 5
  781.       width = 277
  782.       metric = 6    // Pixels
  783.       colorNormal = "BtnText/BtnFace"
  784.       fontName = "Times New Roman"
  785.       fontSize = 8
  786.       text = "<h2>Text Below Data-Entry Area</h2>"
  787.       pageno = 11
  788.    endwith
  789.  
  790.  
  791.    this.TEXT15 = new TEXT(this)
  792.    with (this.TEXT15)
  793.       height = 22
  794.       left = 98
  795.       top = 35
  796.       width = 378
  797.       metric = 6    // Pixels
  798.       colorNormal = "BtnText/BtnFace"
  799.       fontSize = 8
  800.       text = "Enter and format the text that will appear below data-entry area (optional)"
  801.       pageno = 11
  802.    endwith
  803.  
  804.  
  805.    this.ARROW9 = new IMAGE(this)
  806.    with (this.ARROW9)
  807.       height = 13
  808.       left = 83
  809.       top = 35
  810.       width = 13
  811.       metric = 6    // Pixels
  812.       dataSource = "FILENAME Arrow.bmp"
  813.       alignment = 4    // True Size
  814.       pageno = 11
  815.       borderStyle = 3    // None
  816.    endwith
  817.  
  818.  
  819.    this.TEXT13 = new TEXT(this)
  820.    with (this.TEXT13)
  821.       height = 22
  822.       left = 83
  823.       top = 5
  824.       width = 277
  825.       metric = 6    // Pixels
  826.       colorNormal = "BtnText/BtnFace"
  827.       fontName = "Times New Roman"
  828.       fontSize = 8
  829.       text = "<h2>Mail and Home</h2>"
  830.       pageno = 13
  831.    endwith
  832.  
  833.  
  834.    this.TEXT17 = new TEXT(this)
  835.    with (this.TEXT17)
  836.       height = 33
  837.       left = 98
  838.       top = 35
  839.       width = 351
  840.       metric = 6    // Pixels
  841.       colorNormal = "BtnText/BtnFace"
  842.       fontSize = 8
  843.       text = "This Wizard helps you add links to your home page and e-mail address. Select images or text for Home and Mail (optional)."
  844.       pageno = 13
  845.    endwith
  846.  
  847.  
  848.    this.FIRSTPAGETITLE = new HTMLGET(this)
  849.    with (this.FIRSTPAGETITLE)
  850.       transparent = true
  851.       left = 85
  852.       top = 59
  853.       width = 368
  854.       height = 218
  855.       metric = 6    // Pixels
  856.       pageno = 9
  857.    endwith
  858.  
  859.  
  860.    this.PAGELOGO = new IMAGE(this)
  861.    with (this.PAGELOGO)
  862.       visible = false
  863.       height = 70
  864.       left = 8
  865.       top = 2
  866.       width = 60
  867.       metric = 6    // Pixels
  868.       dataSource = "FILENAME Dataentr.bmp"
  869.       alignment = 4    // True Size
  870.       pageno = 0
  871.       borderStyle = 3    // None
  872.    endwith
  873.  
  874.  
  875.    this.RECTANGLE1 = new RECTANGLE(this)
  876.    with (this.RECTANGLE1)
  877.       left = 100
  878.       top = 181
  879.       width = 347
  880.       height = 101
  881.       metric = 6    // Pixels
  882.       text = "Filename and URL"
  883.       colorNormal = "WindowText/BtnFace"
  884.       fontSize = 8
  885.       pageno = 3
  886.    endwith
  887.  
  888.  
  889.    this.FOLDERBOX = new RECTANGLE(this)
  890.    with (this.FOLDERBOX)
  891.       left = 99
  892.       top = 83
  893.       width = 347
  894.       height = 97
  895.       metric = 6    // Pixels
  896.       text = "Folders"
  897.       colorNormal = "WindowText/BtnFace"
  898.       fontSize = 8
  899.       pageno = 3
  900.    endwith
  901.  
  902.  
  903.    this.TEXT19 = new TEXT(this)
  904.    with (this.TEXT19)
  905.       height = 14
  906.       left = 107
  907.       top = 101
  908.       width = 293
  909.       metric = 6    // Pixels
  910.       colorNormal = "BtnText/BtnFace"
  911.       fontSize = 8
  912.       text = "Windows Folder for starting HTML page"
  913.       pageno = 3
  914.    endwith
  915.  
  916.  
  917.    this.TEXT20 = new TEXT(this)
  918.    with (this.TEXT20)
  919.       height = 14
  920.       left = 107
  921.       top = 138
  922.       width = 293
  923.       metric = 6    // Pixels
  924.       colorNormal = "BtnText/BtnFace"
  925.       fontSize = 8
  926.       text = "Windows Folder for Web Server CGI-Bin"
  927.       pageno = 3
  928.    endwith
  929.  
  930.  
  931.    this.TEXT18 = new TEXT(this)
  932.    with (this.TEXT18)
  933.       height = 14
  934.       left = 108
  935.       top = 201
  936.       width = 293
  937.       metric = 6    // Pixels
  938.       colorNormal = "BtnText/BtnFace"
  939.       fontSize = 8
  940.       text = "Filename for .htm, .prg and .exe"
  941.       pageno = 3
  942.    endwith
  943.  
  944.  
  945.    this.TEXT21 = new TEXT(this)
  946.    with (this.TEXT21)
  947.       height = 14
  948.       left = 108
  949.       top = 240
  950.       width = 293
  951.       metric = 6    // Pixels
  952.       colorNormal = "BtnText/BtnFace"
  953.       fontSize = 8
  954.       text = "URL to CGI (ex: www.mysite.com/cgi-bin/)"
  955.       pageno = 3
  956.    endwith
  957.  
  958.  
  959.    this.LOCATIONSTEXT = new TEXT(this)
  960.    with (this.LOCATIONSTEXT)
  961.       height = 42
  962.       left = 98
  963.       top = 35
  964.       width = 332
  965.       metric = 6    // Pixels
  966.       colorNormal = "BtnText/BtnFace"
  967.       fontSize = 8
  968.       text = "This Wizard requires information about your web site and Windows folders in order to generate and run your application. Enter the information as indicated below: "
  969.       pageno = 3
  970.    endwith
  971.  
  972.  
  973.    this.ARROW10 = new IMAGE(this)
  974.    with (this.ARROW10)
  975.       height = 13
  976.       left = 83
  977.       top = 35
  978.       width = 13
  979.       metric = 6    // Pixels
  980.       dataSource = "FILENAME Arrow.bmp"
  981.       alignment = 4    // True Size
  982.       pageno = 3
  983.       borderStyle = 3    // None
  984.    endwith
  985.  
  986.  
  987.    this.HTMLPATHFIELD = new ENTRYFIELD(this)
  988.    with (this.HTMLPATHFIELD)
  989.       onChange = class::VALIDATEPATHS
  990.       height = 19
  991.       left = 107
  992.       top = 115
  993.       width = 294
  994.       metric = 6    // Pixels
  995.       colorHighLight = ""
  996.       fontName = "MS Sans Serif"
  997.       fontSize = 8
  998.       value = "                         "
  999.       maxLength = 100
  1000.       pageno = 3
  1001.       borderStyle = 7    // Client
  1002.    endwith
  1003.  
  1004.  
  1005.    this.CGIPATHFIELD = new ENTRYFIELD(this)
  1006.    with (this.CGIPATHFIELD)
  1007.       onChange = class::VALIDATEPATHS
  1008.       height = 19
  1009.       left = 107
  1010.       top = 153
  1011.       width = 294
  1012.       metric = 6    // Pixels
  1013.       colorHighLight = ""
  1014.       fontName = "MS Sans Serif"
  1015.       fontSize = 8
  1016.       value = "                         "
  1017.       maxLength = 100
  1018.       pageno = 3
  1019.       borderStyle = 7    // Client
  1020.    endwith
  1021.  
  1022.  
  1023.    this.FILENAMEFIELD = new ENTRYFIELD(this)
  1024.    with (this.FILENAMEFIELD)
  1025.       key = class::FILENAMEFIELD_KEY
  1026.       height = 19
  1027.       left = 108
  1028.       top = 216
  1029.       width = 166
  1030.       metric = 6    // Pixels
  1031.       colorHighLight = ""
  1032.       fontName = "MS Sans Serif"
  1033.       fontSize = 8
  1034.       value = "                         "
  1035.       maxLength = 100
  1036.       pageno = 3
  1037.       borderStyle = 7    // Client
  1038.    endwith
  1039.  
  1040.  
  1041.    this.URLFIELD = new ENTRYFIELD(this)
  1042.    with (this.URLFIELD)
  1043.       key = class::URLFIELD_KEY
  1044.       height = 19
  1045.       left = 108
  1046.       top = 255
  1047.       width = 327
  1048.       metric = 6    // Pixels
  1049.       colorHighLight = ""
  1050.       fontName = "MS Sans Serif"
  1051.       fontSize = 8
  1052.       value = "                         "
  1053.       maxLength = 100
  1054.       pageno = 3
  1055.       borderStyle = 7    // Client
  1056.    endwith
  1057.  
  1058.  
  1059.    this.HTMLPATHBUTTON = new PUSHBUTTON(this)
  1060.    with (this.HTMLPATHBUTTON)
  1061.       onClick = class::HTMLPATHBUTTON_ONCLICK
  1062.       height = 19
  1063.       left = 408
  1064.       top = 115
  1065.       width = 27
  1066.       text = ""
  1067.       metric = 6    // Pixels
  1068.       upBitmap = "RESOURCE #148"
  1069.       fontSize = 8
  1070.       group = false
  1071.       colorNormal = "BtnText/BtnFace"
  1072.       pageno = 3
  1073.       value = false
  1074.    endwith
  1075.  
  1076.  
  1077.    this.CGIPATHBUTTON = new PUSHBUTTON(this)
  1078.    with (this.CGIPATHBUTTON)
  1079.       onClick = class::CGIPATHBUTTON_ONCLICK
  1080.       height = 19
  1081.       left = 408
  1082.       top = 153
  1083.       width = 27
  1084.       text = ""
  1085.       metric = 6    // Pixels
  1086.       upBitmap = "RESOURCE #148"
  1087.       fontSize = 8
  1088.       group = false
  1089.       colorNormal = "BtnText/BtnFace"
  1090.       pageno = 3
  1091.       value = false
  1092.    endwith
  1093.  
  1094.  
  1095.    this.TEXT22 = new TEXT(this)
  1096.    with (this.TEXT22)
  1097.       height = 22
  1098.       left = 83
  1099.       top = 5
  1100.       width = 167
  1101.       metric = 6    // Pixels
  1102.       colorNormal = "BtnText/BtnFace"
  1103.       fontName = "Times New Roman"
  1104.       fontSize = 8
  1105.       text = "<font size=5><b>Paths And URLs</b></font>"
  1106.       pageno = 3
  1107.    endwith
  1108.  
  1109.  
  1110.    this.GRID1 = new GRID(this)
  1111.    with (this.GRID1)
  1112.       columns["COLUMN1"] = new GRIDCOLUMN(form.GRID1)
  1113.       columns["COLUMN1"].editorType = 1    // EntryField
  1114.       columns["COLUMN1"].dataLink = form.wiztemp1.rowset.fields["Field"]
  1115.       columns["COLUMN1"].width = 140
  1116.       columns["COLUMN2"] = new GRIDCOLUMN(form.GRID1)
  1117.       columns["COLUMN2"].editorType = 1    // EntryField
  1118.       columns["COLUMN2"].dataLink = form.wiztemp1.rowset.fields["Label"]
  1119.       columns["COLUMN2"].width = 166
  1120.  
  1121.       with (columns["COLUMN1"].editorControl)
  1122.          colorNormal = "N/0XFFFF80"
  1123.          colorHighLight = ""
  1124.          fontName = "MS Sans Serif"
  1125.          fontSize = 8
  1126.       endwith
  1127.  
  1128.  
  1129.       with (columns["COLUMN1"].headingControl)
  1130.          fontName = "MS Sans Serif"
  1131.          fontSize = 8
  1132.          fontBold = false
  1133.          value = "Field                    "
  1134.       endwith
  1135.  
  1136.  
  1137.       with (columns["COLUMN2"].editorControl)
  1138.          colorHighLight = ""
  1139.          fontName = "MS Sans Serif"
  1140.          fontSize = 8
  1141.       endwith
  1142.  
  1143.  
  1144.       with (columns["COLUMN2"].headingControl)
  1145.          fontName = "MS Sans Serif"
  1146.          fontSize = 8
  1147.          fontBold = false
  1148.          value = "Label                    "
  1149.       endwith
  1150.  
  1151.  
  1152.       bgColor = "white"
  1153.       cellHeight = 16
  1154.       allowAddRows = false
  1155.       dataLink = form.wiztemp1.rowset
  1156.       pageno = 6
  1157.       borderStyle = 2    // Lowered
  1158.       height = 162
  1159.       left = 98
  1160.       top = 68
  1161.       width = 347
  1162.       metric = 6    // Pixels
  1163.    endwith
  1164.  
  1165.  
  1166.    this.TEXT23 = new TEXT(this)
  1167.    with (this.TEXT23)
  1168.       height = 33
  1169.       left = 98
  1170.       top = 35
  1171.       width = 340
  1172.       metric = 6    // Pixels
  1173.       colorNormal = "BtnText/BtnFace"
  1174.       fontSize = 8
  1175.       text = "Enter labels corresponding to the fields that will appear in your Web data-entry application. Labels are optional."
  1176.       pageno = 6
  1177.    endwith
  1178.  
  1179.  
  1180.    this.ARROW11 = new IMAGE(this)
  1181.    with (this.ARROW11)
  1182.       height = 13
  1183.       left = 83
  1184.       top = 35
  1185.       width = 13
  1186.       metric = 6    // Pixels
  1187.       dataSource = "FILENAME Arrow.bmp"
  1188.       alignment = 4    // True Size
  1189.       pageno = 6
  1190.       borderStyle = 3    // None
  1191.    endwith
  1192.  
  1193.  
  1194.    this.TEXT24 = new TEXT(this)
  1195.    with (this.TEXT24)
  1196.       height = 22
  1197.       left = 83
  1198.       top = 5
  1199.       width = 137
  1200.       metric = 6    // Pixels
  1201.       colorNormal = "BtnText/BtnFace"
  1202.       fontName = "Times New Roman"
  1203.       fontSize = 8
  1204.       text = "<b><font size=5>Labels</font></b>"
  1205.       pageno = 6
  1206.    endwith
  1207.  
  1208.  
  1209.    this.TEXTABOVEDATAENTRY = new HTMLGET(this)
  1210.    with (this.TEXTABOVEDATAENTRY)
  1211.       transparent = true
  1212.       left = 85
  1213.       top = 59
  1214.       width = 368
  1215.       height = 218
  1216.       metric = 6    // Pixels
  1217.       pageno = 10
  1218.    endwith
  1219.  
  1220.  
  1221.    this.TEXTBELOWDATAENTRY = new HTMLGET(this)
  1222.    with (this.TEXTBELOWDATAENTRY)
  1223.       transparent = true
  1224.       left = 85
  1225.       top = 59
  1226.       width = 368
  1227.       height = 218
  1228.       metric = 6    // Pixels
  1229.       pageno = 11
  1230.    endwith
  1231.  
  1232.  
  1233.    this.ARROW12 = new IMAGE(this)
  1234.    with (this.ARROW12)
  1235.       height = 13
  1236.       left = 83
  1237.       top = 35
  1238.       width = 13
  1239.       metric = 6    // Pixels
  1240.       dataSource = "FILENAME Arrow.bmp"
  1241.       alignment = 4    // True Size
  1242.       pageno = 13
  1243.       borderStyle = 3    // None
  1244.    endwith
  1245.  
  1246.  
  1247.    this.USEIMAGERADIO = new RADIOBUTTON(this)
  1248.    with (this.USEIMAGERADIO)
  1249.       onChange = class::IMAGEORTEXT
  1250.       height = 19
  1251.       left = 98
  1252.       top = 72
  1253.       width = 81
  1254.       text = "Use Image"
  1255.       metric = 6    // Pixels
  1256.       colorNormal = "WindowText/BtnFace"
  1257.       fontSize = 8
  1258.       group = true
  1259.       value = true
  1260.       pageno = 13
  1261.    endwith
  1262.  
  1263.  
  1264.    this.USETEXTRADIO = new RADIOBUTTON(this)
  1265.    with (this.USETEXTRADIO)
  1266.       onChange = class::IMAGEORTEXT
  1267.       height = 19
  1268.       left = 224
  1269.       top = 72
  1270.       width = 99
  1271.       text = "Use Plain Text"
  1272.       metric = 6    // Pixels
  1273.       colorNormal = "WindowText/BtnFace"
  1274.       fontSize = 8
  1275.       group = false
  1276.       value = false
  1277.       pageno = 13
  1278.    endwith
  1279.  
  1280.  
  1281.    this.MAILHOMELIST = new LISTBOX(this)
  1282.    with (this.MAILHOMELIST)
  1283.       onSelChange = class::MAILHOMELIST_ONSELCHANGE
  1284.       height = 70
  1285.       left = 314
  1286.       top = 102
  1287.       width = 138
  1288.       metric = 6    // Pixels
  1289.       id = 179
  1290.       fontSize = 8
  1291.       colorHighLight = "HighLightText/HighLight"
  1292.       dataSource = 'ARRAY {"None (or user-defined)","Animated Grey","Chrome","Brass","Drop Shadow"}'
  1293.       pageno = 13
  1294.       borderStyle = 2    // Lowered
  1295.    endwith
  1296.  
  1297.  
  1298.    this.HOMEIMAGEFIELD = new ENTRYFIELD(this)
  1299.    with (this.HOMEIMAGEFIELD)
  1300.       onChange = class::HOMEIMAGEFIELD_ONCHANGE
  1301.       height = 19
  1302.       left = 175
  1303.       top = 181
  1304.       width = 246
  1305.       metric = 6    // Pixels
  1306.       colorHighLight = ""
  1307.       fontName = "MS Sans Serif"
  1308.       fontSize = 8
  1309.       value = "                         "
  1310.       maxLength = 100
  1311.       pageno = 13
  1312.       borderStyle = 7    // Client
  1313.    endwith
  1314.  
  1315.  
  1316.    this.MAILIMAGEFIELD = new ENTRYFIELD(this)
  1317.    with (this.MAILIMAGEFIELD)
  1318.       onChange = class::MAILIMAGEFIELD_ONCHANGE
  1319.       height = 19
  1320.       left = 175
  1321.       top = 205
  1322.       width = 246
  1323.       metric = 6    // Pixels
  1324.       colorHighLight = ""
  1325.       fontName = "MS Sans Serif"
  1326.       fontSize = 8
  1327.       value = "                         "
  1328.       maxLength = 100
  1329.       pageno = 13
  1330.       borderStyle = 7    // Client
  1331.    endwith
  1332.  
  1333.  
  1334.    this.HOMEURLFIELD = new ENTRYFIELD(this)
  1335.    with (this.HOMEURLFIELD)
  1336.       height = 19
  1337.       left = 175
  1338.       top = 236
  1339.       width = 278
  1340.       metric = 6    // Pixels
  1341.       colorHighLight = ""
  1342.       fontName = "MS Sans Serif"
  1343.       fontSize = 8
  1344.       value = "                         "
  1345.       maxLength = 100
  1346.       pageno = 13
  1347.       borderStyle = 7    // Client
  1348.    endwith
  1349.  
  1350.  
  1351.    this.MAILADDRESSFIELD = new ENTRYFIELD(this)
  1352.    with (this.MAILADDRESSFIELD)
  1353.       height = 19
  1354.       left = 175
  1355.       top = 259
  1356.       width = 278
  1357.       metric = 6    // Pixels
  1358.       colorHighLight = ""
  1359.       fontName = "MS Sans Serif"
  1360.       fontSize = 8
  1361.       value = "                         "
  1362.       maxLength = 100
  1363.       pageno = 13
  1364.       borderStyle = 7    // Client
  1365.    endwith
  1366.  
  1367.  
  1368.    this.HOMEIMAGEBUTTON = new PUSHBUTTON(this)
  1369.    with (this.HOMEIMAGEBUTTON)
  1370.       onClick = class::HOMEIMAGEBUTTON_ONCLICK
  1371.       height = 18
  1372.       left = 428
  1373.       top = 182
  1374.       width = 26
  1375.       text = ""
  1376.       metric = 6    // Pixels
  1377.       upBitmap = "RESOURCE #148"
  1378.       fontSize = 8
  1379.       group = false
  1380.       colorNormal = "BtnText/BtnFace"
  1381.       pageno = 13
  1382.       value = false
  1383.    endwith
  1384.  
  1385.  
  1386.    this.MAILIMAGEBUTTON = new PUSHBUTTON(this)
  1387.    with (this.MAILIMAGEBUTTON)
  1388.       onClick = class::MAILIMAGEBUTTON_ONCLICK
  1389.       height = 18
  1390.       left = 428
  1391.       top = 205
  1392.       width = 26
  1393.       text = ""
  1394.       metric = 6    // Pixels
  1395.       upBitmap = "RESOURCE #148"
  1396.       fontSize = 8
  1397.       group = false
  1398.       colorNormal = "BtnText/BtnFace"
  1399.       pageno = 13
  1400.       value = false
  1401.    endwith
  1402.  
  1403.  
  1404.    this.MAILIMAGE = new IMAGE(this)
  1405.    with (this.MAILIMAGE)
  1406.       height = 70
  1407.       left = 199
  1408.       top = 102
  1409.       width = 93
  1410.       metric = 6    // Pixels
  1411.       alignment = 1    // Top Left
  1412.       pageno = 13
  1413.       borderStyle = 2    // Lowered
  1414.    endwith
  1415.  
  1416.  
  1417.    this.HOMEIMAGE = new IMAGE(this)
  1418.    with (this.HOMEIMAGE)
  1419.       height = 70
  1420.       left = 98
  1421.       top = 102
  1422.       width = 93
  1423.       metric = 6    // Pixels
  1424.       alignment = 1    // Top Left
  1425.       pageno = 13
  1426.       borderStyle = 2    // Lowered
  1427.    endwith
  1428.  
  1429.  
  1430.    this.HOMELABEL = new TEXT(this)
  1431.    with (this.HOMELABEL)
  1432.       height = 19
  1433.       left = 95
  1434.       top = 183
  1435.       width = 77
  1436.       metric = 6    // Pixels
  1437.       colorNormal = "BtnText/BtnFace"
  1438.       fontSize = 8
  1439.       text = "Home Image"
  1440.       pageno = 13
  1441.    endwith
  1442.  
  1443.  
  1444.    this.MAILLABEL = new TEXT(this)
  1445.    with (this.MAILLABEL)
  1446.       height = 19
  1447.       left = 95
  1448.       top = 206
  1449.       width = 78
  1450.       metric = 6    // Pixels
  1451.       colorNormal = "BtnText/BtnFace"
  1452.       fontSize = 8
  1453.       text = "Mail Image"
  1454.       pageno = 13
  1455.    endwith
  1456.  
  1457.  
  1458.    this.TEXT27 = new TEXT(this)
  1459.    with (this.TEXT27)
  1460.       height = 19
  1461.       left = 95
  1462.       top = 238
  1463.       width = 66
  1464.       metric = 6    // Pixels
  1465.       colorNormal = "BtnText/BtnFace"
  1466.       fontSize = 8
  1467.       text = "Home URL"
  1468.       pageno = 13
  1469.    endwith
  1470.  
  1471.  
  1472.    this.TEXT28 = new TEXT(this)
  1473.    with (this.TEXT28)
  1474.       height = 19
  1475.       left = 95
  1476.       top = 262
  1477.       width = 78
  1478.       metric = 6    // Pixels
  1479.       colorNormal = "BtnText/BtnFace"
  1480.       fontSize = 8
  1481.       text = "Mail Address"
  1482.       pageno = 13
  1483.    endwith
  1484.  
  1485.  
  1486.    this.TEXT29 = new TEXT(this)
  1487.    with (this.TEXT29)
  1488.       height = 22
  1489.       left = 83
  1490.       top = 5
  1491.       width = 137
  1492.       metric = 6    // Pixels
  1493.       colorNormal = "BtnText/BtnFace"
  1494.       fontName = "Times New Roman"
  1495.       fontSize = 8
  1496.       text = "<b><font size=5>Logo</font></b>"
  1497.       pageno = 8
  1498.    endwith
  1499.  
  1500.  
  1501.    this.TEXT30 = new TEXT(this)
  1502.    with (this.TEXT30)
  1503.       height = 28
  1504.       left = 98
  1505.       top = 35
  1506.       width = 329
  1507.       metric = 6    // Pixels
  1508.       colorNormal = "BtnText/BtnFace"
  1509.       fontSize = 8
  1510.       text = "Select a graphic logo image to use at the top of your starting page (optional)."
  1511.       pageno = 8
  1512.    endwith
  1513.  
  1514.  
  1515.    this.RECTANGLE2 = new RECTANGLE(this)
  1516.    with (this.RECTANGLE2)
  1517.       left = 101
  1518.       top = 236
  1519.       width = 349
  1520.       height = 46
  1521.       metric = 6    // Pixels
  1522.       text = "Alignment"
  1523.       colorNormal = "WindowText/BtnFace"
  1524.       fontSize = 8
  1525.       pageno = 8
  1526.    endwith
  1527.  
  1528.  
  1529.    this.ARROW13 = new IMAGE(this)
  1530.    with (this.ARROW13)
  1531.       height = 13
  1532.       left = 83
  1533.       top = 35
  1534.       width = 13
  1535.       metric = 6    // Pixels
  1536.       dataSource = "FILENAME Arrow.bmp"
  1537.       alignment = 4    // True Size
  1538.       pageno = 8
  1539.       borderStyle = 3    // None
  1540.    endwith
  1541.  
  1542.  
  1543.    this.LOGOIMAGE = new IMAGE(this)
  1544.    with (this.LOGOIMAGE)
  1545.       height = 131
  1546.       left = 98
  1547.       top = 68
  1548.       width = 350
  1549.       metric = 6    // Pixels
  1550.       alignment = 1    // Top Left
  1551.       pageno = 8
  1552.       borderStyle = 2    // Lowered
  1553.    endwith
  1554.  
  1555.  
  1556.    this.LOGOIMAGEFIELD = new ENTRYFIELD(this)
  1557.    with (this.LOGOIMAGEFIELD)
  1558.       onChange = class::LOGOIMAGEFIELD_ONCHANGE
  1559.       height = 19
  1560.       left = 98
  1561.       top = 207
  1562.       width = 315
  1563.       metric = 6    // Pixels
  1564.       colorHighLight = ""
  1565.       fontName = "MS Sans Serif"
  1566.       fontSize = 8
  1567.       value = "                         "
  1568.       maxLength = 100
  1569.       pageno = 8
  1570.       borderStyle = 7    // Client
  1571.    endwith
  1572.  
  1573.  
  1574.    this.TOPLEFTRADIO = new RADIOBUTTON(this)
  1575.    with (this.TOPLEFTRADIO)
  1576.       height = 19
  1577.       left = 116
  1578.       top = 254
  1579.       width = 70
  1580.       text = "Top/Left"
  1581.       metric = 6    // Pixels
  1582.       colorNormal = "WindowText/BtnFace"
  1583.       fontSize = 8
  1584.       group = true
  1585.       value = true
  1586.       pageno = 8
  1587.    endwith
  1588.  
  1589.  
  1590.    this.TOPCENTERRADIO = new RADIOBUTTON(this)
  1591.    with (this.TOPCENTERRADIO)
  1592.       height = 19
  1593.       left = 239
  1594.       top = 254
  1595.       width = 79
  1596.       text = "Top/center"
  1597.       metric = 6    // Pixels
  1598.       colorNormal = "WindowText/BtnFace"
  1599.       fontSize = 8
  1600.       group = false
  1601.       value = false
  1602.       pageno = 8
  1603.    endwith
  1604.  
  1605.  
  1606.    this.LEFTOFTITLERADIO = new RADIOBUTTON(this)
  1607.    with (this.LEFTOFTITLERADIO)
  1608.       height = 19
  1609.       left = 361
  1610.       top = 254
  1611.       width = 75
  1612.       text = "Left of title"
  1613.       metric = 6    // Pixels
  1614.       colorNormal = "WindowText/BtnFace"
  1615.       fontSize = 8
  1616.       group = false
  1617.       value = false
  1618.       pageno = 8
  1619.    endwith
  1620.  
  1621.  
  1622.    this.TEXT31 = new TEXT(this)
  1623.    with (this.TEXT31)
  1624.       height = 22
  1625.       left = 82
  1626.       top = 5
  1627.       width = 277
  1628.       metric = 6    // Pixels
  1629.       colorNormal = "BtnText/BtnFace"
  1630.       fontName = "Times New Roman"
  1631.       fontSize = 8
  1632.       text = "<h2>Generate Application</h2>"
  1633.       pageno = 14
  1634.    endwith
  1635.  
  1636.  
  1637.    this.TEXT32 = new TEXT(this)
  1638.    with (this.TEXT32)
  1639.       height = 40
  1640.       left = 98
  1641.       top = 35
  1642.       width = 351
  1643.       metric = 6    // Pixels
  1644.       colorNormal = "BtnText/BtnFace"
  1645.       fontSize = 8
  1646.       text = "<p>Click the Finish button to generate your Web data-entry application.</p><p>The following files will be created:</p>"
  1647.       pageno = 14
  1648.    endwith
  1649.  
  1650.  
  1651.    this.ARROW14 = new IMAGE(this)
  1652.    with (this.ARROW14)
  1653.       height = 13
  1654.       left = 83
  1655.       top = 36
  1656.       width = 13
  1657.       metric = 6    // Pixels
  1658.       dataSource = "FILENAME Arrow.bmp"
  1659.       alignment = 4    // True Size
  1660.       pageno = 14
  1661.       borderStyle = 3    // None
  1662.    endwith
  1663.  
  1664.  
  1665.    this.LOGOBUTTON = new PUSHBUTTON(this)
  1666.    with (this.LOGOBUTTON)
  1667.       onClick = class::LOGOBUTTON_ONCLICK
  1668.       height = 19
  1669.       left = 421
  1670.       top = 207
  1671.       width = 29
  1672.       text = ""
  1673.       metric = 6    // Pixels
  1674.       upBitmap = "RESOURCE #148"
  1675.       fontSize = 8
  1676.       group = false
  1677.       colorNormal = "BtnText/BtnFace"
  1678.       pageno = 8
  1679.       value = false
  1680.    endwith
  1681.  
  1682.  
  1683.    this.FINISHLIST = new LISTBOX(this)
  1684.    with (this.FINISHLIST)
  1685.       height = 130
  1686.       left = 98
  1687.       top = 82
  1688.       width = 349
  1689.       metric = 6    // Pixels
  1690.       id = 208
  1691.       fontSize = 8
  1692.       colorNormal = "N/W+"
  1693.       colorHighLight = "HighLightText/HighLight"
  1694.       pageno = 14
  1695.    endwith
  1696.  
  1697.  
  1698.    this.PROGRESS1 = new PROGRESS(this)
  1699.    with (this.PROGRESS1)
  1700.       height = 19
  1701.       left = 98
  1702.       top = 250
  1703.       width = 349
  1704.       metric = 6    // Pixels
  1705.       pageno = 14
  1706.       value = 0
  1707.       rangeMin = 0
  1708.       rangeMax = 100
  1709.    endwith
  1710.  
  1711.  
  1712.    this.RECTANGLE3 = new RECTANGLE(this)
  1713.    with (this.RECTANGLE3)
  1714.       left = 97
  1715.       top = 90
  1716.       width = 351
  1717.       height = 56
  1718.       metric = 6    // Pixels
  1719.       text = "Search Criteria"
  1720.       colorNormal = "BtnText/BtnFace"
  1721.       fontSize = 8
  1722.       pageno = 15
  1723.    endwith
  1724.  
  1725.  
  1726.    this.FINISHLABEL = new TEXT(this)
  1727.    with (this.FINISHLABEL)
  1728.       height = 19
  1729.       left = 98
  1730.       top = 230
  1731.       width = 300
  1732.       metric = 6    // Pixels
  1733.       colorNormal = "BtnText/BtnFace"
  1734.       fontSize = 8
  1735.       text = "Progress"
  1736.       pageno = 14
  1737.    endwith
  1738.  
  1739.  
  1740.    this.ENTRYFIELDRADIO = new RADIOBUTTON(this)
  1741.    with (this.ENTRYFIELDRADIO)
  1742.       onChange = class::ENTRYFIELDRADIO_ONCHANGE
  1743.       height = 24
  1744.       left = 162
  1745.       top = 108
  1746.       width = 79
  1747.       text = "Entryfield"
  1748.       metric = 6    // Pixels
  1749.       colorNormal = "BtnText/BtnFace"
  1750.       fontSize = 8
  1751.       group = true
  1752.       value = true
  1753.       pageno = 15
  1754.    endwith
  1755.  
  1756.  
  1757.    this.COMBOBOXRADIO = new RADIOBUTTON(this)
  1758.    with (this.COMBOBOXRADIO)
  1759.       onChange = class::COMBOBOXRADIO_ONCHANGE
  1760.       height = 24
  1761.       left = 289
  1762.       top = 108
  1763.       width = 83
  1764.       text = "Combobox"
  1765.       metric = 6    // Pixels
  1766.       colorNormal = "BtnText/BtnFace"
  1767.       fontSize = 8
  1768.       group = false
  1769.       value = false
  1770.       pageno = 15
  1771.    endwith
  1772.  
  1773.  
  1774.    this.RECTANGLE4 = new RECTANGLE(this)
  1775.    with (this.RECTANGLE4)
  1776.       left = 96
  1777.       top = 212
  1778.       width = 351
  1779.       height = 56
  1780.       metric = 6    // Pixels
  1781.       text = "Drill-Down Levels"
  1782.       colorNormal = "BtnText/BtnFace"
  1783.       fontSize = 8
  1784.       pageno = 15
  1785.    endwith
  1786.  
  1787.  
  1788.    this.SINGLEREPORTRADIO = new RADIOBUTTON(this)
  1789.    with (this.SINGLEREPORTRADIO)
  1790.       onChange = class::SINGLEREPORTRADIO_ONCHANGE
  1791.       height = 24
  1792.       left = 162
  1793.       top = 231
  1794.       width = 92
  1795.       text = "Single Report"
  1796.       metric = 6    // Pixels
  1797.       colorNormal = "BtnText/BtnFace"
  1798.       fontSize = 8
  1799.       group = true
  1800.       value = true
  1801.       pageno = 15
  1802.    endwith
  1803.  
  1804.  
  1805.    this.DRILLDOWNRADIO = new RADIOBUTTON(this)
  1806.    with (this.DRILLDOWNRADIO)
  1807.       onChange = class::DRILLDOWNRADIO_ONCHANGE
  1808.       height = 24
  1809.       left = 289
  1810.       top = 231
  1811.       width = 79
  1812.       text = "Drill-Down"
  1813.       metric = 6    // Pixels
  1814.       colorNormal = "BtnText/BtnFace"
  1815.       enabled = false
  1816.       fontSize = 8
  1817.       group = false
  1818.       value = false
  1819.       pageno = 15
  1820.    endwith
  1821.  
  1822.  
  1823.    this.TEXT9 = new TEXT(this)
  1824.    with (this.TEXT9)
  1825.       height = 22
  1826.       left = 82
  1827.       top = 5
  1828.       width = 277
  1829.       metric = 6    // Pixels
  1830.       colorNormal = "BtnText/BtnFace"
  1831.       fontName = "Times New Roman"
  1832.       fontSize = 8
  1833.       text = "<h2>Query</h2>"
  1834.       pageno = 15
  1835.    endwith
  1836.  
  1837.  
  1838.    this.TEXT16 = new TEXT(this)
  1839.    with (this.TEXT16)
  1840.       height = 47
  1841.       left = 98
  1842.       top = 36
  1843.       width = 353
  1844.       metric = 6    // Pixels
  1845.       colorNormal = "BtnText/BtnFace"
  1846.       fontSize = 8
  1847.       text = "The first page of your Query and Response application supports either an entryfield (HTML Text Object) or Combobox (HTML Select) for the user to enter or select their search criteria."
  1848.       pageno = 15
  1849.    endwith
  1850.  
  1851.  
  1852.    this.IMAGE15 = new IMAGE(this)
  1853.    with (this.IMAGE15)
  1854.       height = 13
  1855.       left = 83
  1856.       top = 37
  1857.       width = 13
  1858.       metric = 6    // Pixels
  1859.       dataSource = "FILENAME Arrow.bmp"
  1860.       alignment = 4    // True Size
  1861.       pageno = 15
  1862.       borderStyle = 3    // None
  1863.    endwith
  1864.  
  1865.  
  1866.    this.TEXT34 = new TEXT(this)
  1867.    with (this.TEXT34)
  1868.       height = 47
  1869.       left = 99
  1870.       top = 161
  1871.       width = 353
  1872.       metric = 6    // Pixels
  1873.       colorNormal = "BtnText/BtnFace"
  1874.       fontSize = 8
  1875.       text = "Your Query and Response Web application can run a single report, or drill down from the first report into a second. Select the type of Query and Response application you'd like to develop."
  1876.       pageno = 15
  1877.    endwith
  1878.  
  1879.  
  1880.    this.IMAGE16 = new IMAGE(this)
  1881.    with (this.IMAGE16)
  1882.       height = 13
  1883.       left = 84
  1884.       top = 162
  1885.       width = 13
  1886.       metric = 6    // Pixels
  1887.       dataSource = "FILENAME Arrow.bmp"
  1888.       alignment = 4    // True Size
  1889.       pageno = 15
  1890.       borderStyle = 3    // None
  1891.    endwith
  1892.  
  1893.  
  1894.    this.TEXT35 = new TEXT(this)
  1895.    with (this.TEXT35)
  1896.       height = 22
  1897.       left = 83
  1898.       top = 5
  1899.       width = 277
  1900.       metric = 6    // Pixels
  1901.       colorNormal = "BtnText/BtnFace"
  1902.       fontName = "Times New Roman"
  1903.       fontSize = 8
  1904.       text = "<h2>Text On Response Page</h2>"
  1905.       pageno = 12
  1906.    endwith
  1907.  
  1908.  
  1909.    this.TEXT36 = new TEXT(this)
  1910.    with (this.TEXT36)
  1911.       height = 14
  1912.       left = 98
  1913.       top = 35
  1914.       width = 351
  1915.       metric = 6    // Pixels
  1916.       colorNormal = "BtnText/BtnFace"
  1917.       fontSize = 8
  1918.       text = "Enter and format the text that will appear upon successful completion."
  1919.       pageno = 12
  1920.    endwith
  1921.  
  1922.  
  1923.    this.IMAGE17 = new IMAGE(this)
  1924.    with (this.IMAGE17)
  1925.       height = 13
  1926.       left = 83
  1927.       top = 35
  1928.       width = 13
  1929.       metric = 6    // Pixels
  1930.       dataSource = "FILENAME Arrow.bmp"
  1931.       alignment = 4    // True Size
  1932.       pageno = 12
  1933.       borderStyle = 3    // None
  1934.    endwith
  1935.  
  1936.  
  1937.    this.TEXTONRESPONSEPAGE = new HTMLGET(this)
  1938.    with (this.TEXTONRESPONSEPAGE)
  1939.       transparent = true
  1940.       left = 85
  1941.       top = 59
  1942.       width = 368
  1943.       height = 218
  1944.       metric = 6    // Pixels
  1945.       pageno = 12
  1946.    endwith
  1947.  
  1948.  
  1949.    this.LINE2 = new RECTANGLE(this)
  1950.    with (this.LINE2)
  1951.       left = 23
  1952.       top = 292
  1953.       width = 430
  1954.       height = 1
  1955.       metric = 6    // Pixels
  1956.       text = "Rectangle2"
  1957.       colorNormal = "W+/W+"
  1958.       pageno = 0
  1959.       borderStyle = 3    // None
  1960.    endwith
  1961.  
  1962.  
  1963.    this.LINE1 = new RECTANGLE(this)
  1964.    with (this.LINE1)
  1965.       left = 23
  1966.       top = 290
  1967.       width = 430
  1968.       height = 2
  1969.       metric = 6    // Pixels
  1970.       text = "Rectangle1"
  1971.       colorNormal = "N+/N+"
  1972.       pageno = 0
  1973.       borderStyle = 3    // None
  1974.    endwith
  1975.  
  1976.  
  1977.    this.TEXT38 = new TEXT(this)
  1978.    with (this.TEXT38)
  1979.       height = 22
  1980.       left = 82
  1981.       top = 5
  1982.       width = 277
  1983.       metric = 6    // Pixels
  1984.       colorNormal = "BtnText/BtnFace"
  1985.       fontName = "Times New Roman"
  1986.       fontSize = 8
  1987.       text = "<h2>Combobox (Select) Options</h2>"
  1988.       pageno = 16
  1989.    endwith
  1990.  
  1991.  
  1992.    this.TEXT39 = new TEXT(this)
  1993.    with (this.TEXT39)
  1994.       height = 61
  1995.       left = 98
  1996.       top = 36
  1997.       width = 353
  1998.       metric = 6    // Pixels
  1999.       colorNormal = "BtnText/BtnFace"
  2000.       fontSize = 8
  2001.       text = "Enter the options you wish to make available in your HTLM select. Each option must be entered in<i> exactly</i> the format needed to perform a successful looku except for case. All lookups will be converted to upper case.."
  2002.       pageno = 16
  2003.    endwith
  2004.  
  2005.  
  2006.    this.IMAGE19 = new IMAGE(this)
  2007.    with (this.IMAGE19)
  2008.       height = 13
  2009.       left = 83
  2010.       top = 37
  2011.       width = 13
  2012.       metric = 6    // Pixels
  2013.       dataSource = "FILENAME Arrow.bmp"
  2014.       alignment = 4    // True Size
  2015.       pageno = 16
  2016.       borderStyle = 3    // None
  2017.    endwith
  2018.  
  2019.  
  2020.    this.OPTIONFIELD = new ENTRYFIELD(this)
  2021.    with (this.OPTIONFIELD)
  2022.       height = 20
  2023.       left = 100
  2024.       top = 106
  2025.       width = 166
  2026.       metric = 6    // Pixels
  2027.       colorHighLight = ""
  2028.       fontSize = 8
  2029.       value = "                         "
  2030.       pageno = 16
  2031.       borderStyle = 7    // Client
  2032.    endwith
  2033.  
  2034.  
  2035.    this.ADDOPTIONBUTTON = new PUSHBUTTON(this)
  2036.    with (this.ADDOPTIONBUTTON)
  2037.       onClick = class::ADDOPTIONBUTTON_ONCLICK
  2038.       height = 22
  2039.       left = 173
  2040.       top = 137
  2041.       width = 93
  2042.       text = "&Add Option"
  2043.       metric = 6    // Pixels
  2044.       fontSize = 8
  2045.       group = false
  2046.       colorNormal = "BtnText/BtnFace"
  2047.       pageno = 16
  2048.       value = false
  2049.    endwith
  2050.  
  2051.  
  2052.    this.REMOVEOPTIONBUTTON = new PUSHBUTTON(this)
  2053.    with (this.REMOVEOPTIONBUTTON)
  2054.       onClick = class::REMOVEOPTIONBUTTON_ONCLICK
  2055.       height = 22
  2056.       left = 173
  2057.       top = 168
  2058.       width = 93
  2059.       text = "&Remove Option"
  2060.       metric = 6    // Pixels
  2061.       fontSize = 8
  2062.       group = false
  2063.       colorNormal = "BtnText/BtnFace"
  2064.       pageno = 16
  2065.       value = false
  2066.    endwith
  2067.  
  2068.  
  2069.    this.OPTIONLIST = new LISTBOX(this)
  2070.    with (this.OPTIONLIST)
  2071.       height = 170
  2072.       left = 284
  2073.       top = 104
  2074.       width = 159
  2075.       metric = 6    // Pixels
  2076.       id = 231
  2077.       fontSize = 8
  2078.       colorHighLight = "HighLightText/HighLight"
  2079.       pageno = 16
  2080.    endwith
  2081.  
  2082.  
  2083.    this.TEXT25 = new TEXT(this)
  2084.    with (this.TEXT25)
  2085.       height = 22
  2086.       left = 82
  2087.       top = 5
  2088.       width = 341
  2089.       metric = 6    // Pixels
  2090.       colorNormal = "BtnText/BtnFace"
  2091.       fontName = "Times New Roman"
  2092.       fontSize = 12
  2093.       fontBold = true
  2094.       text = "<h3>Report That Responds to Query</h3>"
  2095.       pageno = 17
  2096.    endwith
  2097.  
  2098.  
  2099.    this.TEXT26 = new TEXT(this)
  2100.    with (this.TEXT26)
  2101.       height = 22
  2102.       left = 82
  2103.       top = 5
  2104.       width = 326
  2105.       metric = 6    // Pixels
  2106.       colorNormal = "BtnText/BtnFace"
  2107.       fontName = "Times New Roman"
  2108.       fontSize = 12
  2109.       fontBold = true
  2110.       text = "<h3>Drill-Down Report</h3>"
  2111.       pageno = 18
  2112.    endwith
  2113.  
  2114.  
  2115.    this.SECONDREPORTFIELD = new ENTRYFIELD(this)
  2116.    with (this.SECONDREPORTFIELD)
  2117.       onChange = class::SECONDREPORTFIELD_ONCHANGE
  2118.       height = 19
  2119.       left = 97
  2120.       top = 151
  2121.       width = 317
  2122.       metric = 6    // Pixels
  2123.       colorHighLight = ""
  2124.       fontSize = 8
  2125.       value = "                         "
  2126.       pageno = 18
  2127.       borderStyle = 7    // Client
  2128.    endwith
  2129.  
  2130.  
  2131.    this.SECONDREPORTBUTTON = new PUSHBUTTON(this)
  2132.    with (this.SECONDREPORTBUTTON)
  2133.       onClick = class::SECONDREPORTBUTTON_ONCLICK
  2134.       height = 19
  2135.       left = 425
  2136.       top = 151
  2137.       width = 25
  2138.       text = ""
  2139.       metric = 6    // Pixels
  2140.       upBitmap = "RESOURCE #148"
  2141.       fontSize = 8
  2142.       group = false
  2143.       colorNormal = "BtnText/BtnFace"
  2144.       pageno = 18
  2145.       value = false
  2146.    endwith
  2147.  
  2148.  
  2149.    this.TEXT40 = new TEXT(this)
  2150.    with (this.TEXT40)
  2151.       height = 28
  2152.       left = 98
  2153.       top = 35
  2154.       width = 353
  2155.       metric = 6    // Pixels
  2156.       colorNormal = "BtnText/BtnFace"
  2157.       fontSize = 8
  2158.       text = "This WIzard will call a second report when the user clicks on an item on the initial report."
  2159.       pageno = 18
  2160.    endwith
  2161.  
  2162.  
  2163.    this.IMAGE20 = new IMAGE(this)
  2164.    with (this.IMAGE20)
  2165.       height = 13
  2166.       left = 83
  2167.       top = 34
  2168.       width = 13
  2169.       metric = 6    // Pixels
  2170.       dataSource = "FILENAME Arrow.bmp"
  2171.       alignment = 4    // True Size
  2172.       pageno = 18
  2173.       borderStyle = 3    // None
  2174.    endwith
  2175.  
  2176.  
  2177.    this.IMAGE21 = new IMAGE(this)
  2178.    with (this.IMAGE21)
  2179.       height = 13
  2180.       left = 83
  2181.       top = 132
  2182.       width = 13
  2183.       metric = 6    // Pixels
  2184.       dataSource = "FILENAME Arrow.bmp"
  2185.       alignment = 4    // True Size
  2186.       pageno = 18
  2187.       borderStyle = 3    // None
  2188.    endwith
  2189.  
  2190.  
  2191.    this.INTRO = new TEXT(this)
  2192.    with (this.INTRO)
  2193.       height = 224
  2194.       left = 98
  2195.       top = 35
  2196.       width = 359
  2197.       metric = 6    // Pixels
  2198.       colorNormal = "BtnText/BtnFace"
  2199.       fontSize = 8
  2200.       l1 = "<p>This Data-Entry Web Wizard helps you create an application that gathers data from user-input at the Browser, returns the data to the server and stores it in a server-side database.</p><p></p><p></p><p>This wizard will generate a data-gathering HTML page"
  2201.       l1 += " and a server-side executable application (including modifiable source code).</p><p></p><p></p><p>In order to use this Wizard, you will need to provide:</p><ul><li>The Windows Path to your Web Site folder.</li><li>The URL (Web address) as defined in your W"
  2202.       l1 += "eb Server for CGI-Bin.</li><li>The Windows Path to your CGI-Bin folder.</li><li>An accessible Data Module or Table</li></ul><p></p>"
  2203.       text = l1
  2204.       pageno = 2
  2205.    endwith
  2206.  
  2207.  
  2208.    this.IMAGE22 = new IMAGE(this)
  2209.    with (this.IMAGE22)
  2210.       height = 13
  2211.       left = 83
  2212.       top = 35
  2213.       width = 13
  2214.       metric = 6    // Pixels
  2215.       dataSource = "FILENAME Arrow.bmp"
  2216.       alignment = 4    // True Size
  2217.       pageno = 2
  2218.       borderStyle = 3    // None
  2219.    endwith
  2220.  
  2221.  
  2222.    this.INTROTITLE = new TEXT(this)
  2223.    with (this.INTROTITLE)
  2224.       height = 22
  2225.       left = 82
  2226.       top = 5
  2227.       width = 364
  2228.       metric = 6    // Pixels
  2229.       colorNormal = "BtnText/BtnFace"
  2230.       fontName = "Times New Roman"
  2231.       fontSize = 12
  2232.       fontBold = true
  2233.       text = "<h3>Data-Entry Web Wizard</h3>"
  2234.       pageno = 2
  2235.    endwith
  2236.  
  2237.  
  2238.    this.IMAGE23 = new IMAGE(this)
  2239.    with (this.IMAGE23)
  2240.       height = 13
  2241.       left = 83
  2242.       top = 107
  2243.       width = 13
  2244.       metric = 6    // Pixels
  2245.       dataSource = "FILENAME Arrow.bmp"
  2246.       alignment = 4    // True Size
  2247.       pageno = 2
  2248.       borderStyle = 3    // None
  2249.    endwith
  2250.  
  2251.  
  2252.    this.IMAGE24 = new IMAGE(this)
  2253.    with (this.IMAGE24)
  2254.       height = 13
  2255.       left = 83
  2256.       top = 161
  2257.       width = 13
  2258.       metric = 6    // Pixels
  2259.       dataSource = "FILENAME Arrow.bmp"
  2260.       alignment = 4    // True Size
  2261.       pageno = 2
  2262.       borderStyle = 3    // None
  2263.    endwith
  2264.  
  2265.  
  2266.    this.TEXT44 = new TEXT(this)
  2267.    with (this.TEXT44)
  2268.       height = 22
  2269.       left = 82
  2270.       top = 5
  2271.       width = 275
  2272.       metric = 6    // Pixels
  2273.       colorNormal = "BtnText/BtnFace"
  2274.       fontName = "Times New Roman"
  2275.       fontSize = 12
  2276.       fontBold = true
  2277.       text = "<h3>Publish Web Wizard</h3>"
  2278.       pageno = 19
  2279.    endwith
  2280.  
  2281.  
  2282.    this.TEXT45 = new TEXT(this)
  2283.    with (this.TEXT45)
  2284.       height = 154
  2285.       left = 98
  2286.       top = 35
  2287.       width = 350
  2288.       metric = 6    // Pixels
  2289.       colorNormal = "BtnText/BtnFace"
  2290.       fontSize = 8
  2291.       l2 = "<p>This Wizard publishes static or live Visual dBASE 7 reports to your Web Site as HTML pages. A <i>static</i> report is run when this Wizard is finished. The HTML page it generates remains unchanged until you run this Wizard again. A <i>live</i> report is"
  2292.       l2 += " run on your server in response to a URL called from a page on your Web site. The HTML page returned to the Browse displays the most current data.</p><p></p><p>To use this Wizard, you must provide:</p><ul><li>An accessible Visual dBASE 7 Report (.rep)</li>"
  2293.       l2 += "<li>A Windows Folder for HTML (static reports)</li><li>The WIndows folder assigned to CGI-Bin (live reports)</li></ul>"
  2294.       text = l2
  2295.       pageno = 19
  2296.    endwith
  2297.  
  2298.  
  2299.    this.RECTANGLE6 = new RECTANGLE(this)
  2300.    with (this.RECTANGLE6)
  2301.       left = 95
  2302.       top = 212
  2303.       width = 352
  2304.       height = 49
  2305.       metric = 6    // Pixels
  2306.       text = "Select Report Type"
  2307.       colorNormal = "BtnText/BtnFace"
  2308.       fontSize = 8
  2309.       pageno = 19
  2310.    endwith
  2311.  
  2312.  
  2313.    this.STATICREPORTRADIO = new RADIOBUTTON(this)
  2314.    with (this.STATICREPORTRADIO)
  2315.       height = 24
  2316.       left = 150
  2317.       top = 231
  2318.       width = 110
  2319.       text = "Static Report"
  2320.       metric = 6    // Pixels
  2321.       colorNormal = "BtnText/BtnFace"
  2322.       fontSize = 8
  2323.       group = true
  2324.       value = true
  2325.       pageno = 19
  2326.    endwith
  2327.  
  2328.  
  2329.    this.LIVEREPORTRADIO = new RADIOBUTTON(this)
  2330.    with (this.LIVEREPORTRADIO)
  2331.       height = 24
  2332.       left = 305
  2333.       top = 231
  2334.       width = 86
  2335.       text = "Live Report"
  2336.       metric = 6    // Pixels
  2337.       colorNormal = "BtnText/BtnFace"
  2338.       fontSize = 8
  2339.       group = false
  2340.       value = false
  2341.       pageno = 19
  2342.    endwith
  2343.  
  2344.  
  2345.    this.IMAGE25 = new IMAGE(this)
  2346.    with (this.IMAGE25)
  2347.       height = 13
  2348.       left = 83
  2349.       top = 35
  2350.       width = 13
  2351.       metric = 6    // Pixels
  2352.       dataSource = "FILENAME Arrow.bmp"
  2353.       alignment = 4    // True Size
  2354.       pageno = 19
  2355.       borderStyle = 3    // None
  2356.    endwith
  2357.  
  2358.  
  2359.    this.IMAGE26 = new IMAGE(this)
  2360.    with (this.IMAGE26)
  2361.       height = 13
  2362.       left = 83
  2363.       top = 132
  2364.       width = 13
  2365.       metric = 6    // Pixels
  2366.       dataSource = "FILENAME Arrow.bmp"
  2367.       alignment = 4    // True Size
  2368.       pageno = 19
  2369.       borderStyle = 3    // None
  2370.    endwith
  2371.  
  2372.  
  2373.    this.PUBLISHREPORTFIELD = new ENTRYFIELD(this)
  2374.    with (this.PUBLISHREPORTFIELD)
  2375.       onChange = class::PUBLISHREPORTFIELD_ONCHANGE
  2376.       height = 20
  2377.       left = 98
  2378.       top = 98
  2379.       width = 285
  2380.       metric = 6    // Pixels
  2381.       colorHighLight = ""
  2382.       fontSize = 8
  2383.       value = "                         "
  2384.       pageno = 20
  2385.       borderStyle = 7    // Client
  2386.    endwith
  2387.  
  2388.  
  2389.    this.PUBLISHCGIFIELD = new ENTRYFIELD(this)
  2390.    with (this.PUBLISHCGIFIELD)
  2391.       onChange = class::PUBLISHCGIFIELD_ONCHANGE
  2392.       height = 20
  2393.       left = 98
  2394.       top = 187
  2395.       width = 285
  2396.       metric = 6    // Pixels
  2397.       colorHighLight = ""
  2398.       fontSize = 8
  2399.       value = "                         "
  2400.       pageno = 20
  2401.       borderStyle = 7    // Client
  2402.    endwith
  2403.  
  2404.  
  2405.    this.CGIFOLDERLABEL = new TEXT(this)
  2406.    with (this.CGIFOLDERLABEL)
  2407.       height = 14
  2408.       left = 98
  2409.       top = 168
  2410.       width = 321
  2411.       metric = 6    // Pixels
  2412.       colorNormal = "BtnText/BtnFace"
  2413.       fontSize = 8
  2414.       text = "Enter or select the Windows folder assigned to CGI-Bin"
  2415.       pageno = 20
  2416.    endwith
  2417.  
  2418.  
  2419.    this.TEXT47 = new TEXT(this)
  2420.    with (this.TEXT47)
  2421.       height = 14
  2422.       left = 98
  2423.       top = 77
  2424.       width = 321
  2425.       metric = 6    // Pixels
  2426.       colorNormal = "BtnText/BtnFace"
  2427.       fontSize = 8
  2428.       text = "Enter or select the report (.rep) to publish to your Web site."
  2429.       pageno = 20
  2430.    endwith
  2431.  
  2432.  
  2433.    this.TEXT48 = new TEXT(this)
  2434.    with (this.TEXT48)
  2435.       height = 22
  2436.       left = 82
  2437.       top = 5
  2438.       width = 315
  2439.       metric = 6    // Pixels
  2440.       colorNormal = "BtnText/BtnFace"
  2441.       fontName = "Times New Roman"
  2442.       fontSize = 12
  2443.       fontBold = true
  2444.       text = "<h3>Report File And CGI Folder</h3>"
  2445.       pageno = 20
  2446.    endwith
  2447.  
  2448.  
  2449.    this.PUBLISHREPORTBUTTON = new PUSHBUTTON(this)
  2450.    with (this.PUBLISHREPORTBUTTON)
  2451.       onClick = class::PUBLISHREPORTBUTTON_ONCLICK
  2452.       height = 19
  2453.       left = 396
  2454.       top = 98
  2455.       width = 30
  2456.       text = ""
  2457.       metric = 6    // Pixels
  2458.       upBitmap = "RESOURCE #148"
  2459.       group = false
  2460.       colorNormal = "BtnText/BtnFace"
  2461.       pageno = 20
  2462.       value = false
  2463.    endwith
  2464.  
  2465.  
  2466.    this.PUBLISHCGIBUTTON = new PUSHBUTTON(this)
  2467.    with (this.PUBLISHCGIBUTTON)
  2468.       onClick = class::PUBLISHCGIBUTTON_ONCLICK
  2469.       height = 19
  2470.       left = 396
  2471.       top = 187
  2472.       width = 30
  2473.       text = ""
  2474.       metric = 6    // Pixels
  2475.       upBitmap = "RESOURCE #148"
  2476.       group = false
  2477.       colorNormal = "BtnText/BtnFace"
  2478.       pageno = 20
  2479.       value = false
  2480.    endwith
  2481.  
  2482.  
  2483.    this.IMAGE28 = new IMAGE(this)
  2484.    with (this.IMAGE28)
  2485.       height = 13
  2486.       left = 82
  2487.       top = 78
  2488.       width = 13
  2489.       metric = 6    // Pixels
  2490.       dataSource = "FILENAME Arrow.bmp"
  2491.       alignment = 4    // True Size
  2492.       pageno = 20
  2493.       borderStyle = 3    // None
  2494.    endwith
  2495.  
  2496.  
  2497.    this.IMAGE29 = new IMAGE(this)
  2498.    with (this.IMAGE29)
  2499.       height = 13
  2500.       left = 82
  2501.       top = 169
  2502.       width = 13
  2503.       metric = 6    // Pixels
  2504.       dataSource = "FILENAME Arrow.bmp"
  2505.       alignment = 4    // True Size
  2506.       pageno = 20
  2507.       borderStyle = 3    // None
  2508.    endwith
  2509.  
  2510.  
  2511.    this.TEXT49 = new TEXT(this)
  2512.    with (this.TEXT49)
  2513.       height = 14
  2514.       left = 97
  2515.       top = 131
  2516.       width = 302
  2517.       metric = 6    // Pixels
  2518.       colorNormal = "BtnText/BtnFace"
  2519.       fontSize = 8
  2520.       text = "Enter or select a Visual dBASE 7 report (.rep)"
  2521.       pageno = 17
  2522.    endwith
  2523.  
  2524.  
  2525.    this.FIRSTREPORTFIELD = new ENTRYFIELD(this)
  2526.    with (this.FIRSTREPORTFIELD)
  2527.       onChange = class::FIRSTREPORTFIELD_ONCHANGE
  2528.       height = 19
  2529.       left = 97
  2530.       top = 151
  2531.       width = 313
  2532.       metric = 6    // Pixels
  2533.       colorHighLight = ""
  2534.       fontSize = 8
  2535.       value = "                         "
  2536.       pageno = 17
  2537.       borderStyle = 7    // Client
  2538.    endwith
  2539.  
  2540.  
  2541.    this.TEXT51 = new TEXT(this)
  2542.    with (this.TEXT51)
  2543.       height = 28
  2544.       left = 98
  2545.       top = 35
  2546.       width = 302
  2547.       metric = 6    // Pixels
  2548.       colorNormal = "BtnText/BtnFace"
  2549.       fontSize = 8
  2550.       text = "This Wizard uses a Visual dBASE report (.rep) to return data that matches the user's query."
  2551.       pageno = 17
  2552.    endwith
  2553.  
  2554.  
  2555.    this.IMAGE1 = new IMAGE(this)
  2556.    with (this.IMAGE1)
  2557.       height = 13
  2558.       left = 83
  2559.       top = 34
  2560.       width = 13
  2561.       metric = 6    // Pixels
  2562.       dataSource = "FILENAME Arrow.bmp"
  2563.       alignment = 4    // True Size
  2564.       pageno = 17
  2565.       borderStyle = 3    // None
  2566.    endwith
  2567.  
  2568.  
  2569.    this.IMAGE2 = new IMAGE(this)
  2570.    with (this.IMAGE2)
  2571.       height = 13
  2572.       left = 83
  2573.       top = 132
  2574.       width = 13
  2575.       metric = 6    // Pixels
  2576.       dataSource = "FILENAME Arrow.bmp"
  2577.       alignment = 4    // True Size
  2578.       pageno = 17
  2579.       borderStyle = 3    // None
  2580.    endwith
  2581.  
  2582.  
  2583.    this.FIRSTREPORTBUTTON = new PUSHBUTTON(this)
  2584.    with (this.FIRSTREPORTBUTTON)
  2585.       onClick = class::FIRSTREPORTBUTTON_ONCLICK
  2586.       height = 19
  2587.       left = 419
  2588.       top = 151
  2589.       width = 31
  2590.       text = ""
  2591.       metric = 6    // Pixels
  2592.       upBitmap = "RESOURCE #148"
  2593.       group = false
  2594.       colorNormal = "BtnText/BtnFace"
  2595.       pageno = 17
  2596.       value = false
  2597.    endwith
  2598.  
  2599.  
  2600.    this.RECTANGLE5 = new RECTANGLE(this)
  2601.    with (this.RECTANGLE5)
  2602.       left = 98
  2603.       top = 233
  2604.       width = 347
  2605.       height = 42
  2606.       metric = 6    // Pixels
  2607.       text = "Align Labels and Fields"
  2608.       colorNormal = "BtnText/BtnFace"
  2609.       fontSize = 8
  2610.       pageno = 6
  2611.    endwith
  2612.  
  2613.  
  2614.    this.ALIGNDATALEFTRADIO = new RADIOBUTTON(this)
  2615.    with (this.ALIGNDATALEFTRADIO)
  2616.       height = 15
  2617.       left = 150
  2618.       top = 251
  2619.       width = 111
  2620.       text = "To left of page"
  2621.       metric = 6    // Pixels
  2622.       colorNormal = "BtnText/BtnFace"
  2623.       fontSize = 8
  2624.       group = true
  2625.       value = true
  2626.       pageno = 6
  2627.    endwith
  2628.  
  2629.  
  2630.    this.ALIGNDATACENTERRADIO = new RADIOBUTTON(this)
  2631.    with (this.ALIGNDATACENTERRADIO)
  2632.       height = 15
  2633.       left = 279
  2634.       top = 251
  2635.       width = 114
  2636.       text = "Center of page"
  2637.       metric = 6    // Pixels
  2638.       colorNormal = "BtnText/BtnFace"
  2639.       fontSize = 8
  2640.       group = false
  2641.       value = false
  2642.       pageno = 6
  2643.    endwith
  2644.  
  2645.  
  2646.    this.TEXT33 = new TEXT(this)
  2647.    with (this.TEXT33)
  2648.       height = 14
  2649.       left = 97
  2650.       top = 131
  2651.       width = 302
  2652.       metric = 6    // Pixels
  2653.       colorNormal = "BtnText/BtnFace"
  2654.       fontSize = 8
  2655.       text = "Enter or select a Visual dBASE 7 report (.rep)"
  2656.       pageno = 18
  2657.    endwith
  2658.  
  2659.  
  2660.    this.rowset = this.wiztemp1.rowset
  2661.  
  2662.    ///////////////// Method:  PageChange ////////////////////////////////
  2663.    ///////////////// Purpose: Main Page Navigation method ///////////////
  2664.    ///////////////// Params:  nNum: +1 for forward, -1 for back 
  2665.    Function PageChange(nNum)
  2666.  
  2667.          // if back button pressed
  2668.       if nNum < 0
  2669.          form.nCurrPage = iif(form.nCurrPage = 1,1,form.nCurrPage-1)
  2670.          // relative pagination, to accomodate three wizards with
  2671.          // interleaved pages
  2672.  
  2673.              // save any input in grid
  2674.          if form.pageno = 6
  2675.             if not form.wiztemp1.rowset.endofset
  2676.                form.wiztemp1.rowset.save()
  2677.             endif
  2678.          endif
  2679.          // else, if current page is last one in set
  2680.       elseif form.nCurrPage = alen(form.aPages,1)
  2681.          return // do nothing, you're already on the last page.
  2682.  
  2683.          // else, next button pressed
  2684.       else
  2685.  
  2686.  
  2687.          /* The following section tests as needed BEFORE page
  2688.             change is done in case page change is not allowed.
  2689.             Normally "Next" button status does validation, but that's
  2690.             not possible in all cases.
  2691.          */
  2692.    
  2693.          if form.pageno = 3
  2694.             if not form.validatePaths()
  2695.                msgbox('Paths invalid or URL or Filename missing!')
  2696.                form.nextbutton.enabled = .f.
  2697.                return
  2698.             endif
  2699.  
  2700.          elseif form.pageno = 4
  2701.  
  2702.             /*If this is "data source" page, read in datamodule
  2703.               and populate the fields array. Note that this breaks
  2704.               the "activate next button" validation interface, but
  2705.               there's simply no other control except page-change
  2706.               that suits to verify data source!
  2707.             */
  2708.                // load in custom class and parse data module/table
  2709.             if empty(form.DataSourceField.value)
  2710.                msgbox('Cannot have empty data source!','No file',16)
  2711.                return false
  2712.             endif
  2713.  
  2714.             form.oLib = New SourceFields()
  2715.  
  2716.             form.aSelectedFields = new array()
  2717.             form.aAvailableFields = form.oLib.GetFields(form.DataSourceField.value)
  2718.                // if nothing found, can't go on
  2719.             if alen(form.aAvailableFields,1) = 0
  2720.                msgbox('No field objects found in Data Module or table','No Data',16)
  2721.                return
  2722.             endif
  2723.                // set up datasource of fields listbox   
  2724.    
  2725.             form.AvailableFieldsList.DataSource = 'ARRAY form.aAvailableFields'
  2726.             form.SelectedFieldsList.DataSource  = 'ARRAY form.aSelectedFields'
  2727.  
  2728.  
  2729.          elseif form.pageno = 6
  2730.                  // save any input in grid
  2731.             if not form.wiztemp1.rowset.endofset
  2732.                form.wiztemp1.rowset.save()
  2733.             endif
  2734.  
  2735.          elseif form.pageno = 19
  2736.             if form.LiveReportRadio.value
  2737.                form.CGIFolderLabel.text = ;
  2738.                  "Enter or select the Windows folder assigned to CGI-Bin"
  2739.             else
  2740.                form.CGIFolderLabel.text = ;
  2741.                  "Enter or select the target Web Site folder"
  2742.             endif
  2743.          endif
  2744.  
  2745.          /* This section performs any preparation options required
  2746.             before moving to next page
  2747.          */
  2748.  
  2749.             // Increment current page
  2750.          ++ form.nCurrPage
  2751.  
  2752.       endif
  2753.  
  2754.          // Get actual Pageno from Pages array  
  2755.       nAbsolutePage = form.aPages[form.nCurrPage]  
  2756.  
  2757.       /////////// New Page stuff, only fired going forward
  2758.       if nNum > 0
  2759.          
  2760.          if nAbsolutePage = 4  // paths and URLS
  2761.             class::ValidatePaths()
  2762.  
  2763.          elseif nAbsolutePage = 1
  2764.             form.Wiztemp1.Active = false
  2765.  
  2766.          elseif nAbsolutePage = 5 // Select fields
  2767.  
  2768.             class::SetFieldsButtonStatus() // update "enabled" on fields buttons
  2769.             
  2770.          elseif nAbsolutePage = 6 // Enter Labels
  2771.             
  2772.             class::UpdateGridData()  // update table datalinked to Grid
  2773.  
  2774.          elseif nAbsolutePage =14
  2775.             ////// set up "finish files" for display
  2776.             form.aFinish = new array()
  2777.  
  2778.             
  2779.             if form.cWizardType = 'Publish'
  2780.                cName = trim(form.PublishReportField.value)
  2781.                if at('\',cName) > 0
  2782.                    cName = substr(cName,rat('\',cName)+1)
  2783.                endif
  2784.                if at('.',cName) > 0
  2785.                   cName = substr(cName,1,at('.',cName)-1)
  2786.                endif
  2787.                if form.LiveReportRadio.value
  2788.                  form.aFinish.Add('In your CGI-Bin folder:')
  2789.                  form.aFinish.add('   '+cName+'.bat')
  2790.                  form.aFinish.add('   '+cName+'2.exe')
  2791.                  form.aFinish.add('   '+cName+'.prg')
  2792.                else
  2793.                  form.aFinish.add('In your Web site folder:')
  2794.                  form.aFinish.add('   '+cName+'.htm')
  2795.                endif
  2796.  
  2797.            else  // query
  2798.                if form.cWizardType = 'Query'
  2799.                   cName = trim(form.FirstReportField.value)
  2800.  
  2801.                else // Data-Entry
  2802.                   cName = trim(form.FileNameField.value)
  2803.                                     
  2804.                Endif
  2805.  
  2806.                if at('\',cName) > 0
  2807.                   cName = substr(cName,rat('\',cName)+1)
  2808.                endif
  2809.                if at('.',cName) > 0
  2810.                   cName = substr(cName,1,at('.',cName)-1)
  2811.                endif  
  2812.                 
  2813.                form.aFinish.Add('In your CGI-Bin folder:')
  2814.                form.aFinish.add('   '+cName+'.bat')
  2815.                form.aFinish.add('   '+cName+'2.exe')
  2816.                if form.cWizardType = 'Query' and form.DrillDownRadio.value
  2817.                   form.aFinish.add('   '+cName+'3.exe')
  2818.                endif 
  2819.                form.aFinish.add('   '+cName+'.prg')
  2820.                form.aFinish.add('In your Web site folder:')
  2821.                form.aFinish.add('   '+cName+'.htm')
  2822.  
  2823.  
  2824.             endif
  2825.             form.FinishList.DataSource = 'ARRAY form.aFinish'
  2826.  
  2827.          endif
  2828.    
  2829.       endif
  2830.       
  2831.  
  2832.          // General rules
  2833.      
  2834.    
  2835.       if form.nCurrPage = 1
  2836.          form.text = 'Visual dBASE 7 Web Wizards'
  2837.       else
  2838.          form.text = form.cWizardType+' Web Wizard Step '+ltrim(str(form.nCurrPage-1,3))+;
  2839.            ' of '+ltrim(str(alen(form.aPages,1)-1,3))
  2840.       endif
  2841.       form.PageLogo.visible = not (nAbsolutePage = 1)
  2842.       form.BackButton.enabled = not (nAbsolutePage = 1)
  2843.  
  2844.       form.NextButton.Text = iif(form.nCurrPage = alen(form.aPages,1),;
  2845.            '&Finish','&Next')
  2846.       form.CancelButton.Text = '&Cancel'
  2847.  
  2848.          // Most pages that require validation before "Next" enabled
  2849.          // are handled in individual page changes above, inclucing
  2850.          // methods such as ValidatePaths() on page 2
  2851.       if nNum < 0 and nAbsolutePage # 1
  2852.          form.NextButton.enabled = true
  2853.       elseif nAbsolutePage = 1
  2854.          form.NextButton.enabled = false
  2855.       elseif nAbsolutePage = 16
  2856.          form.NextButton.enabled = ( form.OptionList.count() > 0 )
  2857.       elseif form.nCurrpage  = 2  // if intro page
  2858.          form.NextButton.enabled = true
  2859.       endif
  2860.    
  2861.  
  2862.          // Change page
  2863.       form.pageno = form.aPages[form.nCurrPage]  
  2864.  
  2865.   
  2866.  
  2867.    // Method: UpdateGridData/////////////////////////////////////////
  2868.    // Fill table with values in selected fields array for setting
  2869.    // labels corresponding to fields
  2870.  
  2871.   
  2872.  
  2873.    function UpdateGridData
  2874.       local n
  2875.  
  2876.  
  2877.       aTempFields = new array()        // Create temp array for current
  2878.                                        // Grid field values
  2879.  
  2880.  
  2881.       oRowset = form.Wiztemp1.Rowset   // short reference for easy coding
  2882.       oRowset.first()                  // go to first row in set
  2883.       
  2884.                      // Go through rows in grid and build
  2885.                      // temporary array of contents of grid 
  2886.       do while not oRowset.endofset
  2887.          
  2888.                      /* store current labels for fields in
  2889.                         multi-dim array
  2890.                         [n,1] = Field field
  2891.                         [n,2] = Label field
  2892.                      */
  2893.                      // only store rows for fields that have labels
  2894.                      // this array will be a label "lookup' table
  2895.  
  2896.          if not empty (oRowset.fields['Label'].value)   
  2897.                                        // add array element
  2898.             aTempfields.resize(alen(aTempfields,1)+1,2)
  2899.             n = alen(aTempFields,1)  // get subscript of new element
  2900.                                        // store grid rowset values
  2901.             aTempFields[n,1] = trim(oRowset.fields['Field'].value)
  2902.             aTempFields[n,2] = trim(oRowset.fields['Label'].value)   
  2903.          endif
  2904.  
  2905.          oRowset.next()
  2906.       enddo
  2907.  
  2908.  
  2909.                      // Get rid of all grid rows
  2910.       form.Wiztemp1.active = false
  2911.       _app.databases[1].emptytable('Wiztemp.dbf')
  2912.       form.Wiztemp1.active = true
  2913.       oRowset = form.Wiztemp1.rowset
  2914.  
  2915.          ////// Transfer data from "selected fields" array to grid rowset
  2916.          
  2917.       for n = 1 to alen(form.aSelectedFields)
  2918.          
  2919.             // If array element has a real label in it
  2920.          if len(trim(form.aSelectedFields[n])) > 0
  2921.  
  2922.             oRowset.BeginAppend()
  2923.             oRowset.fields['field'].value = form.aSelectedFields[n]
  2924.             oRowset.fields['label'].value = class::GetLabel(aTempfields,;
  2925.                     form.aSelectedFields[n])
  2926.             oRowset.Save()
  2927.  
  2928.          endif
  2929.  
  2930.       next
  2931.  
  2932.       aTempFields = '' // stub out temporary array object
  2933.                   
  2934.       oRowset.first()  // reset to first field in list
  2935.  
  2936.    ///// Method: GetLabel  traverses temporary array and retrieves any
  2937.    /////         labels that correspond to selected field names
  2938.    ///// Params: aTemp - 2 dim temp array
  2939.    ///// 
  2940.    function GetLabel(aTemp,cField)
  2941.       local n
  2942.       cField = trim(cField)
  2943.  
  2944.                      // traverse temporary array label "lookup table"
  2945.       for n = 1 to alen(aTemp,1)
  2946.                      // if field is found
  2947.          if aTemp[n,1] == cField
  2948.                      // and a label exists
  2949.             if not empty(aTemp[n,2])
  2950.                      // return the label
  2951.                return aTemp[n,2]
  2952.  
  2953.             endif
  2954.  
  2955.          endif
  2956.  
  2957.       next
  2958.  
  2959.       return '' // return nul, nothing found
  2960.  
  2961.    function HELPBUTTON_onClick
  2962.       help
  2963.       return
  2964.  
  2965.    // {Linked Method} form.onClick
  2966.    function SELECTALLBUTTON_onClick
  2967.       // copy "available" array to "selected" array
  2968.       local n
  2969.       for n = 1 to alen(form.aAvailableFields)
  2970.           form.aSelectedFields.add(form.aAvailableFields[n])
  2971.       next
  2972.       form.aAvailableFields = new Array()
  2973.       form.SelectedFieldsList.DataSource  = 'ARRAY form.aSelectedFields'
  2974.       form.AvailableFieldsList.DataSource = 'ARRAY form.aAvailableFields'
  2975.       Class::SetFieldsButtonStatus()   // set status for "move" buttons
  2976.       return
  2977.  
  2978.    // {Linked Method} form.onClick
  2979.    function DESELECTALLBUTTON_onClick
  2980.       // copy "selected array" to "available array"
  2981.       local n
  2982.       for n = 1 to alen(form.aSelectedFields)
  2983.          form.aAvailableFields.Add(form.aSelectedFields[n])
  2984.       next
  2985.       form.aSelectedFields = new Array()
  2986.       form.SelectedFieldsList.DataSource  = 'ARRAY form.aSelectedFields'
  2987.       form.AvailableFieldsList.DataSource = 'ARRAY form.aAvailableFields'
  2988.       Class::SetFieldsButtonStatus()   // set status for "move" buttons
  2989.       return
  2990.  
  2991.    // {Linked Method} form.onClick
  2992.    function DESELECTONEBUTTON_onClick
  2993.       if form.SelectedFieldsList.cursel <= 0
  2994.          return
  2995.          Class::SetFieldsButtonStatus()   // set status for "move" buttons
  2996.       endif
  2997.       // workaround for listbox cursor not changing after "deletes" from
  2998.       // datasource array
  2999.  
  3000.       Local nCursel
  3001.       nCursel = iif(form.AvailableFieldsList.cursel > ;
  3002.                     alen(form.aAvailableFields,1),;
  3003.                     alen(form.aAvailableFields,1),;
  3004.                     form.AvailableFieldsList.cursel)
  3005.  
  3006.          // insert value into "available" listbox
  3007.       form.aAvailableFields.resize(alen(form.aAvailableFields)+1)
  3008.       form.aAvailableFields.insert(nCursel+1)
  3009.       form.aAvailableFields[nCursel+1] =  ;
  3010.            form.SelectedFieldsList.value
  3011.          // delete element from "selected" listbox
  3012.       if alen(form.aSelectedFields,1) = 1
  3013.          form.aSelectedFields = new array()
  3014.          form.SelectedFieldsList.Cursel = 0
  3015.       else
  3016.          form.aSelectedFields.delete(form.SelectedFieldsList.cursel)
  3017.          form.aSelectedFields.Resize(alen(form.aSelectedFields,1)-1)
  3018.          if form.SelectedFieldsList.Cursel > alen(form.aSelectedFields,1)
  3019.             form.SelectedFieldsList.Cursel = alen(form.aSelectedFields,1)
  3020.          endif
  3021.       endif
  3022.          // re - datasource
  3023.       form.SelectedFieldsList.DataSource  = "Array form.aSelectedFields"
  3024.       form.AvailableFieldsList.DataSource = "Array form.aAvailableFields"
  3025.  
  3026.       Class::SetFieldsButtonStatus()   // set status for "move" buttons
  3027.       return
  3028.  
  3029.    // {Linked Method} form.key
  3030.    function FILENAMEFIELD_key(nChar, nPosition,bShift,bControl)
  3031.       class::validatepaths()   
  3032.       return true
  3033.  
  3034.    function FILENAMEFIELD_onChange
  3035.       cRight = this.value
  3036.          // remove folders, if any
  3037.       if at('\',this.value) > 0
  3038.          cRight = substr(cRight,rat('\',cRight)+1)
  3039.       endif
  3040.          // remove extensions, if any
  3041.       if at('.',this.value) >0 
  3042.          cRight = substr(cRight,1,at('.',cRight)-1)
  3043.       endif
  3044.       this.value = cRight
  3045.       class::ValidatePaths()
  3046.       return true
  3047.  
  3048.    //////////////////////Method: SelectOneButton_OnCLick /////////////////
  3049.    //////////////////////Purpose:   Moves field from "available listbox to
  3050.    //////////////////////           "selected" listbox
  3051.  
  3052.    // {Linked Method} form.onClick
  3053.    function SELECTONEBUTTON_onClick
  3054.       if form.AvailableFieldsList.Cursel <= 0
  3055.          return
  3056.       endif
  3057.       Local nCursel // workaround for no "0" cursel on empty listbox
  3058.       nCursel = form.SelectedFieldsList.Cursel
  3059.       //nCursel = iif(alen(form.aSelectedFields,1) = 0,0,;
  3060.             form.SelectedFieldsList.cursel)
  3061.                                  // insert value into "selected" listbox
  3062.       form.aSelectedFields.resize(alen(form.aSelectedFields,1)+1) 
  3063.       form.aSelectedFields.insert(nCursel+1)
  3064.       form.aSelectedFields[nCursel+1] =  ;
  3065.            form.availableFieldsList.value
  3066.  
  3067.       if alen(form.aAvailableFields,1) = 1
  3068.          form.aAvailableFields = new array()
  3069.       else
  3070.          form.aAvailableFields.delete(form.AvailableFieldsList.cursel)
  3071.          form.aAvailableFields.Resize(alen(form.aAvailableFields,1)-1)
  3072.       endif
  3073.  
  3074.       form.SelectedFieldsList.DataSource  = "Array form.aSelectedFields"
  3075.       form.AvailableFieldsList.DataSource = "Array form.aAvailableFields"
  3076.       form.SelectedFieldsList.Cursel      = nCursel+1
  3077.       class::SetFieldsButtonStatus()
  3078.       return
  3079.  
  3080.    // Adds option to listbox for query by combobox
  3081.    function ADDOPTIONBUTTON_onClick
  3082.       if empty(form.OptionField.value)
  3083.          return false
  3084.       endif
  3085.       nCursel =  form.OptionList.Cursel
  3086.       form.aOptions.resize(alen(form.aOptions,1)+1)
  3087.  
  3088.       form.aOptions.insert(nCursel+1)
  3089.       form.aOptions[nCursel+1] = form.OptionField.value
  3090.       form.OptionList.DataSource = 'ARRAY form.aOptions'
  3091.       form.NextButton.enabled = form.OptionList.count() > 0
  3092.       form.OptionList.Cursel = nCursel+1
  3093.       form.OptionField.SetFocus()
  3094.       return true
  3095.  
  3096.    // Removes option from listbox for query by combobox
  3097.    function REMOVEOPTIONBUTTON_OnClick
  3098.       if alen(form.aOptions,1) = 0
  3099.          return false
  3100.       elseif alen(form.aOptions,1) = 1
  3101.          form.aOptions = new array()
  3102.       else
  3103.          nCursel = form.OptionList.Cursel
  3104.          form.aOptions.Delete(form.optionlist.cursel)
  3105.          form.aOptions.resize(alen(form.aOptions,1)-1)
  3106.       endif
  3107.       form.OptionList.DataSource = 'ARRAY form.aOptions'
  3108.       form.NextButton.enabled = form.Optionlist.count() > 0
  3109.       if alen(form.aOptions,1) >= (nCursel-1)
  3110.          form.OptionList.Cursel = nCursel - 1
  3111.       else 
  3112.          form.Optionlist.Cursel = alen(form.aOptions,1)
  3113.       endif
  3114.       form.optionfield.setfocus()
  3115.       return true
  3116.  
  3117.    function SECONDREPORTBUTTON_onClick
  3118.       cReport = getfile('*.rep','Drill-Down Report',.t.)
  3119.       if not empty(cReport)
  3120.         form.SecondReportField.value = cReport
  3121.       endif
  3122.       // to be implemented later - class::LoadSecondReportLists()
  3123.       return
  3124.  
  3125.    function SECONDREPORTFIELD_onChange
  3126.       if empty(this.value)
  3127.          // do nothing
  3128.       elseif at('.REP',upper(this.Value)) = 0
  3129.          msgbox('Visual dBASE 7 .rep file required!','Wrong file type',16)
  3130.       else
  3131.          // to be implemented later
  3132.          //class::LoadSecondReportLists()
  3133.       endif
  3134.  
  3135.       // to be implemented later class::ValidateSecondReport()
  3136.    function LoadSecondReportLists
  3137.       
  3138.       
  3139.       form.oLib = New SourceFields()
  3140.       form.aKeyFields = form.oLib.GetFields(form.SecondReportField.value,true)
  3141.             // if nothing found, can't go on
  3142.       if alen(form.aKeyFields,1) = 0
  3143.          msgbox('No field objects found in report','No Data',16)
  3144.       else
  3145.         form.SecondReportFieldList.DataSource = 'ARRAY form.aKeyFields'
  3146.       endif
  3147.                // set up datasource of fields listbox         
  3148.       form.oLib = ''  //stub out reference
  3149.  
  3150.    ////////Method: ValidateSecondReport
  3151.    ////////Purpose: Controls Next Button for second drill-down report page
  3152.    function ValidateSecondReport
  3153.       if form.SecondReportFieldList.count() = 0 or;
  3154.          form.SecondReportTextList.count() = 0 or ;
  3155.          empty(form.SecondReportField.value) or ;
  3156.          not file(trim(form.SecondReportField.value))
  3157.  
  3158.          form.nextbutton.enabled = false
  3159.       else
  3160.          form.NextButton.enabled = true
  3161.       endif
  3162.             
  3163.  
  3164.    // {Linked Method} form.onClick
  3165.    function BACKBUTTON_onClick
  3166.       class::pageChange(-1)
  3167.       return
  3168.  
  3169.    // {Linked Method} form.onClick
  3170.    function BACKGROUNDCOLORBUTTON_onClick
  3171.       cColor = getColor()
  3172.       if len(trim(cColor)) >0 
  3173.          form.BackgroundColorField.value = ;
  3174.             form.FirstpageTitle.ColorToHex(cColor)
  3175.  
  3176.          form.BackColorDisplay.ColorNormal = 'N/'+;
  3177.             form.BackgroundColorField.value
  3178.          class::UpdateBackGrounds()
  3179.       endif
  3180.       return
  3181.  
  3182.    // {Linked Method} form.onChange
  3183.    function BACKGROUNDCOLORFIELD_onChange
  3184.       // makes sure color notation is consistent with VdB "0x"
  3185.       if substr(this.value,1,1) = '#'
  3186.          this.value = substr(this.value,2)
  3187.       endif
  3188.       if substr(this.value,1,2) # '0x'
  3189.          this.value = '0x'+this.value
  3190.       endif
  3191.           // set color value for display
  3192.       form.BackColorDisplay.Colornormal = 'N/'+cColor
  3193.       class::UpdateBackGrounds()
  3194.       return
  3195.  
  3196.    // {Linked Method} form.onSelChange
  3197.    function BACKGROUNDLIST_onSelChange
  3198.       form.BackgroundImageField.value = this.value      
  3199.      
  3200.       if this.value = 'None'
  3201.          form.BackGroundDisplay.DataSource = Null
  3202.       else
  3203.          form.BackgroundDisplay.DataSource = "FILENAME "+this.value
  3204.       endif
  3205.       form.refresh()
  3206.       class::UpdateBackGrounds()
  3207.       return
  3208.  
  3209.    // {Linked Method} form.onClick
  3210.    function CANCELBUTTON_onClick
  3211.       form.close()
  3212.      
  3213.       return
  3214.  
  3215.    function FinishButton_OnClick
  3216.       set proc to wizout.cc addi
  3217.       form.out= new Wizout(form)
  3218.       form.finishLabel.text = 'Streaming HTML...'
  3219.       if form.out.StreamHtml()
  3220.          if form.out.StreamCGI()
  3221.             Form.CancelButton.Text ='&Close'
  3222.             form.Finishlabel.text = 'Done...'
  3223.          endif
  3224.       endif
  3225.       form.out = ''
  3226.   
  3227.       form.Progress1.value = 0
  3228.  
  3229.    // {Linked Method} form.onClick
  3230.    function CGIPATHBUTTON_onClick
  3231.       Local cDir
  3232.       cDir = iif(len(trim(form.CGIPathField.value)) > 0,;
  3233.              trim(form.CGIPathField.value),Set('Directory'))
  3234.       cDir = GetDirectory(cDir)
  3235.       if len(trim(cDir)) > 0
  3236.          form.CGIPathField.value = cDir
  3237.       endif
  3238.       class::ValidatePaths()
  3239.       return
  3240.  
  3241.    // {Linked Method} form.onClick
  3242.    function DATAENTRYBUTTON_onClick
  3243.       form.cWizardType = 'Data Entry'
  3244.       class::CreatePageNavigationArray()
  3245.  
  3246.       //Empty temporary table completely
  3247.       form.wiztemp1.active = false
  3248.       _app.databases[1].emptyTable('Wiztemp.dbf')
  3249.                       //Refresh the query
  3250.       form.wiztemp1.active = true
  3251.       
  3252.       //Instantiate new array for "selected fields"
  3253.       form.aSelectedFields = new Array()
  3254.  
  3255.       form.intro.text = "<p>This Data-Entry Web Wizard helps you create an application that gathers data from user-input at the Browser, returns the data to the server and stores it in a server-side database.</p><p></p><p></p><p>This wizard will generate a data-gathering HTML page and a "
  3256.       form.intro.text += "server-side executable application (including modifiable source code).</p><p></p><p></p><p>In order to use this Wizard, you will need to provide:</p><ul><li>The Windows Path to your Web Site folder.</li><li>The URL (Web address) as defined in your Web Serv"
  3257.       form.intro.text += "er for CGI-Bin.</li><li>The Windows Path to your CGI-Bin folder.</li><li>An accessible Data Module or Table</li></ul><p></p>"
  3258.  
  3259.       form.introtitle.text = "<h3>Data-Entry Web Wizard</h3>"
  3260.       form.PageLogo.datasource = 'FILENAME Dataentr.bmp'
  3261.       class::PageChange(1)
  3262.       return
  3263.  
  3264.    function DRILLDOWNBUTTON_onClick
  3265.       form.cWizardType = 'Query And Response'
  3266.       form.aOptions = new array()
  3267.       form.intro.text = "This Query And Response Web Wizard helps you create an application in which the user enters a query in the Browser which is returned to the server which, in turn, responds with a Visual dBASE 7 HTML report.<p></p><p></p><p>This wizard will generate an HTML query page and a "
  3268.       form.intro.text += "server-side executable application (including modifiable source code).</p><p></p><p></p><p>In order to use this Wizard, you will need to provide:</p><ul><li>The Windows Path to your Web Site folder.</li><li>The URL (Web address) as defined in your Web Serv"
  3269.       form.intro.text += "er for CGI-Bin.</li><li>The Windows Path to your CGI-Bin folder.</li><li>At least one accessible report (.rep)</li></ul><p></p>"
  3270.       form.introtitle.text = "<h3>Query And Response Web Wizard</h3>"
  3271.       form.PageLogo.DataSource = 'FILENAME Query.bmp'
  3272.       class::CreatePageNavigationArray()
  3273.       class::PageChange(1)
  3274.       return
  3275.  
  3276.    function DRILLDOWNRADIO_onChange
  3277.       class::SetupQueryArray()
  3278.       return
  3279.  
  3280.    function ENTRYFIELDRADIO_onChange
  3281.       Class::SetupQueryArray()
  3282.       return
  3283.  
  3284.    function PUBLISHBUTTON_OnClick
  3285.       form.cWizardType = 'Publish'
  3286.       class::CreatePageNavigationArray()
  3287.       form.PageLogo.DataSource = 'FILENAME Reports.bmp'
  3288.       class::PageChange(1)
  3289.       return
  3290.  
  3291.    function PUBLISHREPORTBUTTON_onClick
  3292.       cReport = getfile('*.rep','VdB 7 Report',.t.)
  3293.       if not empty(cReport)
  3294.          form.publishreportfield.value = cReport
  3295.       endif
  3296.       class::CheckPublishFilesAndFolders()
  3297.       return true
  3298.  
  3299.    function PUBLISHREPORTFIELD_onChange
  3300.       if empty(this.value)
  3301.          //do nothing
  3302.       elseif at('.REP',upper(this.value)) = 0
  3303.          msgbox('Not a Visual dBASE 7 Report (.rep) file!','Wrong Type',16)
  3304.          
  3305.       elseif not file(this.value)
  3306.          msgbox('File does not exist: '+this.value,'No Such File',16)
  3307.          
  3308.       endif
  3309.  
  3310.       class::CheckPublishFilesAndFolders()
  3311.       return true
  3312.  
  3313.    function CheckPublishFilesAndFolders
  3314.    if empty(form.PublishReportField.value) or ;
  3315.       empty(form.PublishCGIField.value)
  3316.       Form.NextButton.Enabled = false
  3317.       return false
  3318.    elseif not class::IsFolderOk(Form.PublishCGIField.value)
  3319.       form.NextButton.Enabled = false
  3320.       return false
  3321.    elseif at('.REP',upper(form.PublishReportField.value)) = 0 or;
  3322.       not file(form.PublishReportField.value)
  3323.       form.NextButton.Enabled = false
  3324.       return false
  3325.    endif
  3326.    form.NextButton.Enabled = true
  3327.    return true
  3328.  
  3329.    function COMBOBOXRADIO_onChange
  3330.       class::SetupQueryArray()
  3331.       return
  3332.  
  3333.    function PUBLISHCGIBUTTON_onClick
  3334.       cPath = trim(getDirectory())
  3335.       if not empty(cPath)
  3336.          if right(cPath,1) # '\'
  3337.             cPath += '\'
  3338.          endif
  3339.          form.PublishCGIField.value = cPath
  3340.          class::CheckPublishFilesAndFolders()
  3341.       endif
  3342.       return
  3343.  
  3344.    function PUBLISHCGIFIELD_onChange
  3345.       if empty(this.value)
  3346.          //do nothing
  3347.       elseif not class::isFolderOk(this.value)
  3348.          msgbox('Not a valid folder','Bad Folder',16)
  3349.       else
  3350.          cPath = trim(this.Value)
  3351.          if right(cPath,1) # '\'
  3352.             cPath+='\'
  3353.          endif
  3354.          
  3355.       endif
  3356.       
  3357.       class::CheckPublishFilesAndFolders()
  3358.       return true 
  3359.  
  3360.    // {Linked Method} form.onClick
  3361.    function DATAMODULELOOKUPBUTTON_onClick
  3362.       local cFile
  3363.       cFile = trim(getfile('*.dbf;*.db;*.dmd'))
  3364.       if not empty(cFile)
  3365.          form.DataSourceField.value = cFile
  3366.       endif
  3367.       return
  3368.  
  3369.    // {Linked Method} form.onOpen
  3370.    function form_onOpen
  3371.       form.WizardType = ' '
  3372.          // init arrays for selecting fields from query
  3373.       form.aAvailableFields   = new array()
  3374.       form.aSelectedFields    = new array()
  3375.  
  3376.          //Get all the graphic filenames from folder and
  3377.          //dataSource the BacgroundList
  3378.       form.aPix               = new array()
  3379.       form.aPix1              = new array()
  3380.       form.aPix2              = new array()
  3381.          //Get files from folder
  3382.       form.aPix1.Dir('*.jpg')
  3383.       form.aPix2.Dir('*.jpg')
  3384.       form.aPix.add('None')
  3385.          //Consolidate into a single array
  3386.       for n = 1 to alen(form.aPix1,1)
  3387.          form.aPix.add(form.aPix1[n,1])
  3388.       next
  3389.       for n = 1 to alen(form.aPix2,1)
  3390.          form.aPix.add(form.aPix2[n,1])
  3391.       next
  3392.  
  3393.       form.aPix1 = '' // remove references/kill arrays
  3394.       form.aPix2 = '' // no longer needed
  3395.          // datasource the background listbox
  3396.       form.BackgroundList.DataSource = 'ARRAY form.aPix'
  3397.       form.BackgroundDisplay.DataSource = Null
  3398.  
  3399.       return
  3400.  
  3401.    // {Linked Method} form.open
  3402.    function form_open
  3403.       class::Setup()
  3404.       return super::open()          
  3405.              
  3406.  
  3407.    // {Linked Method} form.readModal
  3408.    function form_readmodal
  3409.       class::Setup()
  3410.       return super::readmodal()
  3411.  
  3412.    // Gets Home Image file, tests it and displays it
  3413.    function HOMEIMAGEBUTTON_onClick
  3414.       cFile = trim(getfile('*.gif;*.jpg','Home Image',.t.))
  3415.       if not empty(cFile)
  3416.          if at('.JPG',upper(cFile)) = 0 and ;
  3417.             at('.GIF',upper(cFile)) = 0
  3418.             if msgbox('Not a standard Web format! Continue anyway?',;
  3419.                'Graphic Format',36) # 6
  3420.                return
  3421.             endif
  3422.          endif
  3423.          Form.HomeImageField.value = trim(cFile)
  3424.          Form.MailHomeList.Cursel = 1
  3425.          //Attempt to display this image
  3426.          Try
  3427.             form.HomeImage.DataSource = 'FILENAME '+trim(cFile)
  3428.          catch (Exception e)
  3429.             Msgbox('Error displaying this image format','Display Error',16)
  3430.          Endtry
  3431.       endif
  3432.       return
  3433.  
  3434.    // Tests image file name typed in for "home" image
  3435.    function HOMEIMAGEFIELD_onChange
  3436.       
  3437.       if form.UseTextRadio.value   //If this is just text
  3438.          return true
  3439.       elseif empty(this.value)    //If Blank
  3440.          return true
  3441.       endif
  3442.       //Attempt to display this image
  3443.       cFile = trim(this.value)
  3444.       if not empty(cFile)
  3445.          if at('.JPG',upper(cFile)) = 0 and ;
  3446.             at('.GIF',upper(cFile)) = 0
  3447.             if msgbox('Not a standard Web format! Continue anyway?',;
  3448.                'Graphic Format',36) # 6
  3449.                return false
  3450.             endif
  3451.          endif
  3452.       endif
  3453.  
  3454.       Try
  3455.          form.HomeImage.DataSource = 'FILENAME '+trim(cFile)
  3456.       catch (Exception e)
  3457.          Msgbox('Error displaying this image format','Display Error',16)
  3458.       Endtry
  3459.  
  3460.       return true
  3461.  
  3462.    // Gets Home Image file, tests it and displays it
  3463.    function MAILIMAGEBUTTON_onClick
  3464.       cFile = trim(getfile('*.gif;*.jpg','Mail Image',.t.))
  3465.       if not empty(cFile)
  3466.          if at('.JPG',upper(cFile)) = 0 and ;
  3467.             at('.GIF',upper(cFile)) = 0
  3468.             if msgbox('Not a standard Web format! Continue anyway?',;
  3469.                'Graphic Format',36) # 6
  3470.                return
  3471.             endif
  3472.          endif
  3473.          Form.MailImageField.value = trim(cFile)
  3474.          Form.MailHomeList.Cursel = 1
  3475.   
  3476.  
  3477.          //Attempt to display this image
  3478.          Try
  3479.             form.MailImage.DataSource = 'FILENAME '+trim(cFile)
  3480.          catch (Exception e)
  3481.             Msgbox('Error displaying this image format','Display Error',16)
  3482.          Endtry
  3483.       endif
  3484.       return
  3485.  
  3486.     //Tests image file typed in for "Mail Image'
  3487.     function MAILIMAGEFIELD_onChange
  3488.       if form.UseTextRadio.value   //If this is just text
  3489.          return true
  3490.       elseif empty(this.value)    //If Blank
  3491.          return true
  3492.       endif
  3493.       //Attempt to display this image
  3494.       cFile = trim(this.value)
  3495.       if not empty(cFile)
  3496.          if at('.JPG',upper(cFile)) = 0 and ;
  3497.             at('.GIF',upper(cFile)) = 0
  3498.             if msgbox('Not a standard Web format! Continue anyway?',;
  3499.                'Graphic Format',36) # 6
  3500.                return false
  3501.             endif
  3502.          endif
  3503.       endif
  3504.  
  3505.       Try
  3506.          form.MailImage.DataSource = 'FILENAME '+trim(cFile)
  3507.       catch (Exception e)
  3508.          Msgbox('Error displaying this image format','Display Error',16)
  3509.       Endtry
  3510.  
  3511.       return true
  3512.  
  3513.       
  3514.  
  3515.    //// Method: ImageorText
  3516.    //// Purpose: Sets controls for Image or Text for Home and Mail
  3517.    function Imageortext
  3518.       if form.useTextRadio.Value
  3519.          form.HomeLabel.text = 'Home Text'
  3520.          form.HomeImageButton.Enabled = false
  3521.          form.MailLabel.text = 'Mail Text'
  3522.          form.MailImageButton.Enabled = false
  3523.          if at('.',form.HomeImageField.value) > 0        
  3524.             form.HomeImageField.value = ''
  3525.          endif
  3526.          if at('.',form.MailImageField.value) > 0
  3527.             form.HomeImageField.value = ''
  3528.          endif
  3529.          form.HomeImage.DataSource = ''
  3530.          form.MailImage.DataSource = ''
  3531.       else
  3532.          form.HomeLabel.Text = 'Home Image'
  3533.          form.HomeImageButton.Enabled = true
  3534.          form.MailLabel.Text = 'Mail Text'
  3535.          form.MailImageButton.Enabled = true
  3536.  
  3537.       endif
  3538.       return true
  3539.  
  3540.    function setup
  3541.             // Set the text for the main Wizard Type buttons on page 1
  3542.       this.home = class::SetHomePath()
  3543.       class::ReadIni()
  3544.       this.DataEntryButton.text  = 'Remote   '+chr(13)+;
  3545.            'Data'+chr(13)+'Entry'
  3546.       this.DrillDownButton.text  = 'Query'+chr(13)+;
  3547.            'And'+chr(13)+'Response'
  3548.       this.PublishButton.text    = 'Publish'+chr(13)+;
  3549.            'Live && Static Reports'
  3550.             // declare vars for page navigation
  3551.       this.nCurrPage = 1
  3552.       this.aPages = new array()
  3553.       
  3554.  
  3555.    ////////////////Method: SetHomePath
  3556.    ////////////////Purpose: Gets folder from which this app was launched
  3557.    function SetHomePath
  3558.       cPath = program(0)
  3559.       cPath = substr(cPath,1,rat('\',cPath))
  3560.       return cPath
  3561.  
  3562.    // {Linked Method} form.onClick
  3563.    function HTMLPATHBUTTON_onClick
  3564.          //Get folder for HTML page
  3565.       Local cDir
  3566.       cDir = iif(len(trim(form.HTMLPathField.value)) > 0,;
  3567.              trim(form.HTMLPathField.value),Set('Directory'))
  3568.       cDir = GetDirectory(cDir)
  3569.       if len(trim(cDir)) > 0
  3570.          form.HTMLPathField.value = cDir
  3571.       endif
  3572.       class::ValidatePaths()
  3573.       return
  3574.  
  3575.    // Load listbox selections on Mail/Home image listbox
  3576.    function MAILHOMELIST_onSelChange
  3577.   
  3578.       if this.value = 'Animated Grey'
  3579.          form.homeimage.datasource = 'FILENAME '+form.cloadPath+'Home.gif'
  3580.          form.homeimagefield.value = form.cLoadPath+"Home.gif"
  3581.          form.mailimage.datasource = 'FILENAME '+form.cLoadPath+'Mail.gif'
  3582.          form.MailImageField.value = form.cLoadPath+'Mail.gif'
  3583.  
  3584.       elseif this.value = 'Brass'
  3585.          form.homeimage.datasource = 'FILENAME '+form.cloadPath+'BrasHome.gif'
  3586.          form.mailimage.datasource = 'FILENAME '+form.cloadPath+'BrasMail.gif'
  3587.          form.homeimagefield.value = form.cLoadPath+'BrasHome.gif'
  3588.          form.mailimagefield.value = form.cLoadPath+'BrasMail.gif'
  3589.  
  3590.       elseif this.value = 'Drop Shadow'
  3591.          form.homeimage.datasource = 'FILENAME '+form.cloadPath+'DropHome.gif'
  3592.          form.mailimage.datasource = 'FILENAME '+form.cloadPath+'DropMail.gif'
  3593.          form.homeimagefield.value = form.cLoadPath+'DropHome.gif'
  3594.          form.mailimagefield.value = form.cLoadPath+'DropMail.gif'
  3595.  
  3596.       elseif this.value = 'Chrome'
  3597.          form.homeimage.datasource = 'FILENAME '+form.cloadPath+'ChrmHome.gif'
  3598.          form.mailimage.datasource = 'FILENAME '+form.cloadPath+'ChrmMail.gif'
  3599.          form.homeimagefield.value = form.cLoadPath+'Chrmhome.gif'
  3600.          form.mailimagefield.value = form.cLoadPath+'ChrmMail.gif'
  3601.  
  3602.          //form.mailimage.datasource = 'FILENAME ChrmMail.gif' 
  3603.       elseif this.value = 'None'
  3604.          form.homeimage.datasource = ''
  3605.          form.mailimage.datasource = '' 
  3606.          form.homeimagefield.value = ''
  3607.          form.mailimagefield.value = ''
  3608.       endif 
  3609.       return
  3610.  
  3611.       Class::SetImageFieldValue()
  3612.  
  3613.       return true
  3614.  
  3615.    
  3616.  
  3617.    ////////////////Method: SetImageFieldValue//////////////////
  3618.    ////////////////Purpose: Sets the value of the entryfield that
  3619.    ////////////////        contains the path to the image
  3620.    function SetImageFieldValue
  3621.  
  3622.       if this.value = 'None'
  3623.          form.homeimagefield.value = ''
  3624.          form.mailimagefield.value = ''
  3625.       else
  3626.          form.homeimagefield.value = substr(form.homeimage.datasource,;
  3627.             at('FILENAME ',form.homeimage.datasource)+1)
  3628.          form.mailimagefield.value = substr(form.mailimage.datasource,;
  3629.             at('FILENAME ',form.mailimage.datasource)+1)
  3630.       endif
  3631.  
  3632.       return true
  3633.  
  3634.    // {Linked Method} form.onClick
  3635.    function NEXTBUTTON_onClick
  3636.       if this.text = '&Finish'
  3637.          class::FinishButton_OnClick()
  3638.       else
  3639.          class::pageChange(1)
  3640.       endif
  3641.       return
  3642.  
  3643.    //// Method: UpdateBackgrounds
  3644.    function UpdateBackgrounds
  3645.     
  3646.       local cFilename  // used to format for long filenames with spaces
  3647.       
  3648.       if upper(form.BackgroundImageField.value) = 'NONE' or;
  3649.          empty(form.BackgroundImageField.value)
  3650.          form.background = ""
  3651.          if not empty(form.BackgroundColorField.value)
  3652.             form.colornormal = trim(form.BackGroundColorField.value)
  3653.          endif
  3654.          form.Refresh()
  3655.       else
  3656.          form.ColorNormal = 'BtnFace'
  3657.          form.Background = 'FILENAME '+trim(form.BackGroundImageField.value)
  3658.       endif
  3659.  
  3660.  
  3661.  
  3662.       return true
  3663.  
  3664.    //// Method: CreatePageNavigationArray
  3665.    //// Purpose: Manages "virtual pages" for three wizards on one form
  3666.    function CreatePageNavigationArray
  3667.    
  3668.   
  3669.    if form.cWizardType       = 'Data Entry'
  3670.       // First, set up which pages go where
  3671.       
  3672.       form.aPages = new Array(14)
  3673.       form.aPages[1]  =  1  // Wizard Selection Page
  3674.       form.aPages[2]  =  2  // Introduction page
  3675.       form.aPages[3]  =  3  // Get Folders/Paths
  3676.       form.aPages[4]  =  4  // Get Data Source Page
  3677.       form.aPages[5]  =  5  // Get Fields page
  3678.       form.aPages[6]  =  6  // Get Labels page
  3679.       form.aPages[7]  =  7  // Appearance
  3680.       form.aPages[8]  =  8  // Logo
  3681.       form.aPages[9]  =  9  // Get First Page Title
  3682.       form.aPages[10] =  10  // Get Text Above Data               
  3683.       form.aPages[11] =  11 // Get Text Below Data
  3684.       form.aPages[12] =  12 // Get Response Page Text
  3685.       form.aPages[13] =  13 // Mail and home
  3686.       form.aPages[14] =  14 // Finish
  3687.  
  3688.  
  3689.    elseif form.cWizardType   = 'Query And Response'
  3690.       class::SetupQueryArray()
  3691.     
  3692.  
  3693.    else                 //Publish Wizard
  3694.       form.aPages = new Array(4)
  3695.       form.aPages[1]  = 1   //Wizard Selection Page
  3696.       form.aPages[2]  = 19  //Intro-Select Report Type
  3697.       form.aPages[3]  = 20  //Select Report/CGI Folder
  3698.       form.aPages[4]  = 14  //Finish
  3699.  
  3700.    endif
  3701.  
  3702.    /////////////////////Method:SetUpQueryArray//////////////////////////
  3703.    /////////////////////Purpose: Adjust query pages for combobox or
  3704.    /////////////////////         or entryfield query
  3705.    function SetupQueryArray
  3706.  
  3707.    if form.comboboxradio.value and form.DrillDownRadio.value
  3708.  
  3709.       form.aPages = new Array(14)
  3710.       form.aPages[1]  = 1   //Wizard Selection Page
  3711.       form.aPages[2]  = 2   //Introduction page
  3712.       form.aPages[3]  = 3   //Get Folders/Paths
  3713.       form.aPages[4]  = 15  //Query page
  3714.       form.aPages[5]  = 16  //Combobox Options
  3715.       form.aPages[6]  = 17  //Report No. 1
  3716.       form.aPages[7]  = 18  //Report No. 2
  3717.       form.aPages[8]  = 7   //Appearance
  3718.       form.aPages[9]  = 8   //Logo
  3719.       form.aPages[10] = 9   //Get First Page Title
  3720.       form.aPages[11] = 10  //Get Text Above Data
  3721.       form.aPages[12] = 11  //Get Text Below Data
  3722.       form.aPages[13] = 13  //Mail and Home
  3723.       form.aPages[14] = 14  //Finish
  3724.  
  3725.    elseif form.ComboboxRadio.Value
  3726.       form.aPages = new Array(13)
  3727.       form.aPages[1]  = 1   //Wizard Selection Page
  3728.       form.aPages[2]  = 2   //Introduction page
  3729.       form.aPages[3]  = 3   //Get Folders/Paths
  3730.       form.aPages[4]  = 15  //Query page
  3731.       form.aPages[5]  = 16  //Combobox Options
  3732.       form.aPages[6]  = 17  //Report No. 1
  3733.  
  3734.       form.aPages[7]  = 7   //Appearance
  3735.       form.aPages[8]  = 8   //Logo
  3736.       form.aPages[9]  = 9   //Get First Page Title
  3737.       form.aPages[10] = 10  //Get Text Above Data
  3738.       form.aPages[11] = 11  //Get Text Below Data
  3739.       form.aPages[12] = 13  //Mail and Home
  3740.       form.aPages[13] = 14  //Finish
  3741.  
  3742.  
  3743.    elseif form.DrillDownRadio.value
  3744.  
  3745.       form.aPages = new Array(13)
  3746.       form.aPages[1]  = 1   //Wizard Selection Page
  3747.       form.aPages[2]  = 2   //Introduction page
  3748.       form.aPages[3]  = 3   //Get Folders/Paths
  3749.       form.aPages[4]  = 15  //Query page
  3750.       form.aPages[5]  = 17  //Report No. 1
  3751.       form.aPages[6]  = 18  //Report No. 2
  3752.       form.aPages[7]  = 7   //Appearance
  3753.       form.aPages[8]  = 8   //Logo
  3754.       form.aPages[9]  = 9   //Get First Page Title
  3755.       form.aPages[10] = 10  //Get Text Above Data
  3756.       form.aPages[11] = 11  //Get Text Below Data
  3757.       form.aPages[12] = 13  //Mail and Home
  3758.       form.aPages[13] = 14  //Finish
  3759.  
  3760.    else
  3761.  
  3762.       form.aPages = new Array(12)
  3763.       form.aPages[1]  = 1   //Wizard Selection Page
  3764.       form.aPages[2]  = 2   //Introduction page
  3765.       form.aPages[3]  = 3   //Get Folders/Paths
  3766.       form.aPages[4]  = 15  //Query page
  3767.       form.aPages[5]  = 17  //Report No. 1
  3768.       form.aPages[6]  = 7   //Appearance
  3769.       form.aPages[7]  = 8   //Logo
  3770.       form.aPages[8]  = 9   //Get First Page Title
  3771.       form.aPages[9]  = 10  //Get Text Above Data
  3772.       form.aPages[10] = 11  //Get Text Below Data
  3773.       form.aPages[11] = 13  //Mail and Home
  3774.       form.aPages[12] = 14  //Finish
  3775.  
  3776.  
  3777.    endif
  3778.  
  3779.    function SINGLEREPORTRADIO_onChange
  3780.       class::SetupQueryArray()
  3781.       return
  3782.  
  3783.    /////////////////////Method: Finish
  3784.    /////////////////////Purpose: Generates application
  3785.    function finish
  3786.    return true
  3787.       
  3788.  
  3789.    function FIRSTREPORTBUTTON_onClick
  3790.       local cReport
  3791.       cReport = getfile('*.rep','First Report',.t.)
  3792.   
  3793.        if not empty(cReport)
  3794.          form.firstReportField.value = cReport
  3795.         // to be implemented later class::SetupFirstReportFields()
  3796.       endif
  3797.  
  3798.       return
  3799.  
  3800.    function FIRSTREPORTFIELD_onChange
  3801.       form.nextbutton.enabled = false
  3802.       /* Temporarily removed - to be implemented later
  3803.       class::SetupFirstReportFields() // parse out the fields
  3804.       */
  3805.       return true
  3806.  
  3807.    function FIRSTREPORTLIST_onSelChange
  3808.       class::ValidateFirstReportFields()
  3809.       return
  3810.  
  3811.    function SetupFirstReportFields
  3812.       set proc to webwizard.wfm addi
  3813.  
  3814.       if not file(form.FirstReportField.value)        // checkto see if file exists
  3815.          msgbox('File "'+trim(this.value)+'" does not exist','Bad File Path',16)
  3816.          return false
  3817.       elseif at('.REP',upper(form.FirstReportField.value)) =0
  3818.          msgbox('Must be a Visual dBASE 7 .rep file!','Wrong file type',16)
  3819.          return false
  3820.       endif
  3821.  
  3822.       form.oProcess = new form()
  3823.       with form.oProcess
  3824.          MDI = false
  3825.          autocenter = true
  3826.          scaleFontBold = false
  3827.          height = 4.5
  3828.          canclose = {;return false}
  3829.          left = 30.4286
  3830.          top = 4.9545
  3831.          width = 40
  3832.          text = ""
  3833.          onOpen = class::ProcessFirstReportFields
  3834.       endwith
  3835.  
  3836.       form.oProcess.oParent = form
  3837.  
  3838.       form.oProcess.TEXT1 = new TEXT(form.oProcess)
  3839.       with (form.oProcess.TEXT1)
  3840.          height = 0.7273
  3841.          left = 11
  3842.          top = .7
  3843.          width = 16.4286
  3844.          metric = 0  // Chars
  3845.          colorNormal = "BtnText/BtnFace"
  3846.          text = "Reading in report..."
  3847.       Endwith
  3848.  
  3849.       form.oProcess.PROGRESS1 = new PROGRESS(form.oProcess)
  3850.       with (form.oProcess.PROGRESS1)
  3851.          height = 0.7273
  3852.          left = 11
  3853.          top =  2.2
  3854.          width = 16.4286
  3855.          metric = 0  // Chars
  3856.          colorNormal = "BtnText/BtnFace"
  3857.          rangeMin  = 0
  3858.          rangeMax = 100
  3859.          value = 0
  3860.       Endwith
  3861.  
  3862.       form.oProcess.ReadModal()
  3863.       form.oProcess.Release()
  3864.       form.oProcess = ''
  3865.       class::ValidateFirstReportFields()
  3866.       return
  3867.       
  3868.  
  3869.    // This method is EXPORTED, sent as a function pointer to the
  3870.    // form created above so that the form will cover the processing
  3871.    // time taken by the method.
  3872.    Function ProcessFirstReportFields
  3873.       form.oLib = New SourceFields()
  3874.  
  3875.       form.progress1.value = 10
  3876.  
  3877.       form.oParent.aFirstReportFields =;
  3878.            form.oLib.GetFields(form.oParent.FirstReportField.value,true)
  3879.                // if nothing found, can't go on
  3880.       if alen(form.oParent.aFirstReportFields,1) = 0
  3881.          msgbox('No field objects found in Data Module or table','No Data',16)
  3882.          return
  3883.       endif
  3884.  
  3885.       form.progress1.value = 25
  3886.  
  3887.       // set up datasource of fields listbox   
  3888.       form.oParent.FirstReportList.DataSource =;
  3889.           'ARRAY form.oParent.aFirstReportFields'
  3890.       form.oParent.FirstReportList.Cursel = 1
  3891.  
  3892.       form.progress1.value = 50
  3893.  
  3894.       form.oLib = New TextFields()
  3895.  
  3896.       form.progress1.value = 65
  3897.       form.oParent.aTextFields= ;
  3898.            form.oLib.GetTextFields(form.oParent.FirstReportField.value,true)
  3899.       if alen(form.oParent.aTextFields,1) = 0
  3900.          msgbox('Cannot find text objects in first report!','Missing Data',16)
  3901.       endif
  3902.  
  3903.       form.progress1.value = 80
  3904.  
  3905.       form.oParent.SecondReportTextList.DataSource = 'ARRAY form.oParent.aTextFields'
  3906.       form.oLib = ''
  3907.       form.progress1.value = 100
  3908.       form.canclose = {;return true}
  3909.       form.close()
  3910.  
  3911.       return true
  3912.                
  3913.    
  3914.   
  3915.  
  3916.   function ValidateFirstReportFields
  3917.      form.NextButton.Enabled = form.FirstReportList.cursel > 0
  3918.           return true
  3919.         
  3920.  
  3921.    function FIRSTRESPONSEBUTTON_onClick
  3922.       cReport = getfile('*.REP')
  3923.       if len(trim(cReport)) > 0
  3924.          form.firstresponsefield.value = cReport
  3925.       endif
  3926.       return
  3927.  
  3928.    function SetFieldsButtonStatus
  3929.          /* these buttons move fields from "available" to "selected" and
  3930.             back. Enabled depends on whether there is data available in
  3931.             either listbox to be moved
  3932.          */
  3933.       form.SelectOneButton.enabled   = alen(form.aAvailableFields,1) > 0
  3934.       form.SelectAllButton.enabled   = form.SelectOneButton.enabled
  3935.       form.deselectOneButton.enabled = alen(form.aSelectedFields,1) > 0
  3936.       form.DeselectAllButton.enabled = form.DeselectOneButton.enabled
  3937.       form.nextbutton.enabled = alen(form.aSelectedFields,1) > 0
  3938.  
  3939.    return true
  3940.  
  3941.    // {Linked Method} form.key
  3942.    function URLField_Key(nChar)
  3943.       class::ValidatePaths(this.value+chr(nChar))
  3944.    return True
  3945.  
  3946.    
  3947.  
  3948.    // Validates folders and presence of URLs on page 2
  3949.  
  3950.    // {Linked Method} form.onChange
  3951.    // {Linked Method} form.onChange
  3952.    function ValidatePaths(cUrl,cFile)
  3953.    
  3954.       if empty(cUrl)
  3955.          cUrl = Form.UrlField.value
  3956.       endif
  3957.       if empty(cFile)
  3958.          cFile = form.FileNameField.value
  3959.       endif
  3960.  
  3961.       if empty(form.CGIPathField.value) or ;
  3962.          not class::IsFolderOk(form.CGIPathField.value)
  3963.  
  3964.          return false
  3965.  
  3966.       elseif empty(form.HTMLPathField.value) or ;
  3967.          not Class::IsFolderOk(form.HTMLPathField.value)
  3968.  
  3969.          return false
  3970.  
  3971.       elseif empty(cUrl)
  3972.  
  3973.          return false
  3974.  
  3975.       elseif empty(cFile)
  3976.  
  3977.          return false
  3978.  
  3979.       endif
  3980.  
  3981.  
  3982.  
  3983.       form.nextbutton.enabled = true
  3984.       return true
  3985.  
  3986.    ///Tests is folder exists
  3987.    function IsFolderOk(cPath)
  3988.  
  3989.       local cCurrPath
  3990.       cCurrPath = set('Directory')
  3991.          //attemp a change directory, if fails, return false
  3992.       try
  3993.  
  3994.          cd (cPath)
  3995.  
  3996.       Catch (Exception e)
  3997.  
  3998.          cd (cCurrPath)
  3999.          return false
  4000.  
  4001.       endtry
  4002.      
  4003.       cd (cCurrPath)
  4004.    
  4005.       return true
  4006.  
  4007.    // {Linked Method} form.onClick
  4008.    function LOGOBUTTON_onClick
  4009.       cLogo=getfile('*.jpg;*.gif')
  4010.       if len(trim(cLogo)) > 0
  4011.          form.LogoImageField.value = cLogo
  4012.          try
  4013.  
  4014.             form.logoimage.datasource = 'FILENAME '+trim(form.LogoImageField.value)
  4015.  
  4016.          catch (Exception e)
  4017.  
  4018.            msgbox('Cannot open image: '+form.LogoImageField.value)
  4019.  
  4020.          endtry
  4021.          
  4022.       endif
  4023.       return
  4024.  
  4025.    // {Linked Method} form.onChange
  4026.    function LogoImageField_onChange
  4027.       try
  4028.  
  4029.          form.logoimage.datasource = 'FILENAME '+trim(this.value)
  4030.  
  4031.       catch (Exception e)
  4032.  
  4033.         msgbox('Cannot open image: '+this.value)
  4034.  
  4035.       endtry
  4036.       return
  4037.  
  4038.    //Form OnClose method
  4039.  
  4040.    // {Linked Method} form.onClose
  4041.    function FORM_onClose
  4042.       // Write new .ini file to disk
  4043.       form.Wiztemp1.active = false
  4044.       class::WriteIni()
  4045.       return true
  4046.  
  4047.    ////////Method:   ReadINI //////////////////////////////////////////////
  4048.    ////////Purpose:  Reads in INI file at program startup /////////////////
  4049.    function ReadINI
  4050.          //Check to see if .ini file exists
  4051.       if not file(this.home+'Webwizard.ini')
  4052.          return                // if not, go back
  4053.       endif
  4054.  
  4055.          // attempt to open it
  4056.       nHnd = fOpen(this.home+'Webwizard.ini','R')
  4057.          // If it doesn't open
  4058.       if nHnd < 0             // go back
  4059.          return
  4060.       endif
  4061.          // if it opens successfully, loop through and read
  4062.          // values into form
  4063.       do
  4064.  
  4065.         // check through all matched pairs
  4066.          
  4067.  
  4068.         cStr = trim(fGets(nHnd))  // read in one line from disk file
  4069.         cValue = substr(cStr,at('=',cStr)+1)  // Extract value from name pair
  4070.  
  4071.         if cStr = 'FILENAMEFIELD'
  4072.            form.FileNameField.value = cValue
  4073.         elseif cStr = 'URLFIELD'
  4074.            form.UrlField.value = cValue
  4075.         elseif cStr = 'CGIPATHFIELD'
  4076.            form.CGIPathField.value = cValue
  4077.         elseif cStr = 'HTMLPATHFIELD'
  4078.            form.HTMLPathField.value = cValue
  4079.         elseif cStr = 'BACKGROUNDIMAGEFIELD'
  4080.            form.BackGroundImageField.value = cValue
  4081.         elseif cStr = 'BACKGFOUNDCOLORFIELD'
  4082.            form.BackGroundColorField.value = cValue
  4083.         elseif cStr = 'HOMEIMAGEFIELD'
  4084.            form.HomeImageField.value = cValue
  4085.         elseif cStr = 'MAILIMAGEFIELD'
  4086.            form.MailImageField.value = cValue
  4087.         elseif cStr = 'LOGOIMAGEFIELD'
  4088.            form.LogoImageField.Value = cValue
  4089.         elseif cStr = 'MAILADDRESSFIELD'
  4090.            form.MailAddressField.Value = cValue
  4091.         elseif cStr = 'HOMEURLFIELD'
  4092.            form.HomeURLField.Value = cValue
  4093.         endif
  4094.  
  4095.  
  4096.      until fEof(nHnd)
  4097.      fClose(nHnd)
  4098.      if not empty(form.LogoImageField.value)
  4099.         form.LogoImage.DataSource = 'FILENAME '+form.LogoImageField.Value
  4100.      endif
  4101.      if not empty(form.HomeImageField.value)
  4102.         form.HomeImage.DataSource = 'FILENAME '+form.HomeImageField.value
  4103.      endif
  4104.      if not empty(form.MailImageField.value)
  4105.         form.MailImage.DataSource = 'FILENAME '+form.MailImageField.value
  4106.      endif
  4107.      class::UpdateBackgrounds()
  4108.      return
  4109.  
  4110.       ////////////Method: WriteINI
  4111.       ////////////Purpose: Writes reusable field values to .ini file
  4112.       Function WriteIni
  4113.          // If it exists, delete it
  4114.       if file(this.home+'WebWizard.ini')
  4115.          dele file(this.home+'WebWizard.ini')
  4116.       endif
  4117.  
  4118.          // Create new .ini file
  4119.       nHnd = fCreate(this.home+'WebWizard.ini')
  4120.       if nHnd < 0    // if fails
  4121.          return      // go back
  4122.       endif
  4123.  
  4124.       fPuts(nHnd,'[PATHS]')
  4125.       fPuts(nHnd,'FILENAMEFIELD='+ form.FileNameField.value)
  4126.       fPuts(nHnd,'URLFIELD='+ form.UrlField.value)
  4127.       fPuts(nHnd,'CGIPATHFIELD='+ form.CGIPathField.value)
  4128.       fPuts(nHnd,'HTMLPATHFIELD='+ form.HTMLPathField.value)
  4129.       fPuts(nHnd,'[APPEARANCE]')
  4130.       fPuts(nHnd,'BACKGROUNDIMAGEFIELD='+ form.BackGroundImageField.value)
  4131.       fPuts(nHnd,'BACKGFOUNDCOLORFIELD='+ form.BackGroundColorField.value)
  4132.       fPuts(nHnd,'HOMEIMAGEFIELD='+ form.HomeImageField.value)
  4133.       fPuts(nHnd,'MAILIMAGEFIELD='+form.MailImageField.value)
  4134.       fPuts(nHnd,'LOGOIMAGEFIELD='+form.LogoImageField.value)
  4135.       fPuts(nHnd,'MAILADDRESSFIELD='+form.MailAddressField.value)
  4136.       fPuts(nHnd,'HOMEURLFIELD='+form.HomeUrlField.value)
  4137.  
  4138.       fClose(nHnd)
  4139. endclass
  4140.